Healthcare organizations using Epic need clinical data available in Salesforce in a way that avoids fragmented records and workflows that fail under production volume. This requirement defines most Salesforce Epic integration projects. There are two ways healthcare providers can integrate: HL7 v2 and FHIR, each with their own benefits. You must know the best-case scenarios for both, if used incorrectly, can result in inaccurate data and create compliance risks.
So, which is the better approach? When to use HL7 and where FHIR delivers better results. If you’re wondering about these questions, then this blog is for you. In this blog, we explore in detail about these integration paths. In addition, we’ll also share a few best practices to avoid Epic EHR integration failures while building reliable, scalable architectures for Salesforce Health Cloud.
What’s inside
What is Salesforce Epic Integration in Healthcare?
HL7 v2 vs FHIR APIs: Which is Better Integration Approach to Use?
How FHIR APIs Connect Epic and Salesforce Health Cloud
How to Do Salesforce Epic Integration Successfully for Healthcare Organizations
Conclusion
What is Salesforce Epic Integration in Healthcare?
Salesforce Epic integration allows connection of the clinical and administrative data with Salesforce Health Cloud. This enables healthcare providers with a unified view of patient information, interactions, and other details within the platform. It includes HL7 v2 messaging, FHIR APIs or both, providing a safe and a HIPAA-compliant real-time data sharing.
How Does Salesforce Integrate with Epic?
Health Cloud EHR integration isn’t about just copying Epic records into Salesforce. It is an ongoing process with data flowing in real time, gets mapped to the right objects, and stays sync as records change on either side. Few use cases:
Patient and demographic sync keep names, contact details, and patient identifier reconciliation aligns across systems, reducing duplicate or mismatched records.
Encounters and clinical information give care coordinators visibility into visits, diagnoses, and treatment history without logging into Epic directly.
Care management teams use synced data to build care plans and track interventions inside Salesforce.
Provider information feeds referral workflows and directory accuracy.
Patient engagement tools draw on Epic data to personalize outreach and communication.
Contact-center workflows rely on accurate, current patient data, so agents aren’t working from outdated records.
What is HL7?
HL7 v2 or Health Level 7 is a messaging standard used across healthcare systems, including Epic. It’s a very old system to exchange operational events like admissions, transfers, discharges, orders, and results. HL7 is message-based rather than resource-based, which means each event triggers a discrete, structured message rather than a query against a shared data model.
When to Use Specific HL7 Standards
For admission, discharge, and transfer (ADT) feeds
Apply HL7 v2 for lab results and diagnostic reports
To trigger real-time clinical event notifications
Billing and insurance claim messages
Utilize HL7 v2 when hospital systems depend on legacy interfaces
When to avoid HL7 v2:
Skip HL7 v2 when projects demand modern, API-driven interoperability. Its rigid text-based format and custom “Z-segments” make cross-system mapping error-prone, especially in cloud or mobile environments.
What are FHIR APIs?
FHIR, or Fast Healthcare Interoperability Resources, is a set of basic standards applied in an API manner to structure health records into resources, like Patient, Encounter or Condition. Typically, systems use REST APIs to request or subscribe to specific resources to communicate instead of sending event messages. This is because these APIs are more suitable for modern apps than older messaging formats.
What is the FHIR API standard used for?
Use it for patient demographics and records retrieval
To manage care plans and medication
Best for mobile health apps and patient portals
For keeping analytics and population health dashboards
Need secure, modular data exchange across systems
When to avoid Salesforce FHIR integration:
Avoid Salesforce FHIR integration when hospital systems haven’t fully implemented the standard or only support partial resources. In such cases, depending on FHIR can lead to gaps in data exchange, and you’d need HL7 v2 to work without friction.
HL7 v2 vs FHIR APIs: Which is Better Integration Approach to Use?
Factor
HL7 v2
FHIR APIs
Data modelMessage-basedResource-based
CommunicationEvent/message drivenAPI/request driven
Typical useOperational eventsApplication/data access
Data exchangeStructured messagesJSON/XML resources
Best fitReal-time event notificationsModern application workflows
Integration challengeParsing/mappingAPI, authorization, terminology
Swipe horizontally to see all columns →
Is FHIR better than HL7 v2 for Epic Integration?
No. Each has their own benefits, and at times enterprises need both. HL7 v2 handles the operational event stream; using Salesforce FHIR integration can support the modern application layer. You cannot consider one integration path as a complete substitute for another and may need both to operate without delays or compliance risks.
How FHIR APIs Connect Epic and Salesforce Health Cloud
FHIR APIs connect Epic and Salesforce Health Cloud by exposing structured healthcare resources such as Patient, Encounter, and Condition through Epic’s FHIR program. Secured with OAuth, the Salesforce Healthcare API consumes these resources to enable consistent data exchange. This supports standard Salesforce FHIR integration patterns, reducing complexity compared to custom frameworks, and strengthening overall Health Cloud EHR integration reliability.
Where HL7 v2 Fits in a Salesforce Epic Integration Architecture
HL7 v2 drives event-based workflows: ADT messages, encounter updates, patient transfers, orders, and results. These events must reach Salesforce quickly and without data loss, which is where an integration platform becomes essential. MuleSoft, particularly MuleSoft Direct for Health Cloud, transforms HL7 v2 messages before they enter Salesforce. It converts raw segments into structured records that align with Health Cloud objects. This segment-to-object mapping is where most engineering effort lies, and it’s not what Salesforce was designed to handle natively.
The integration layer should own transformation, routing, monitoring, error handling, and orchestration. Salesforce documentation highlights MuleSoft’s ability to process both HL7 v2 and FHIR data for Health Cloud, underscoring that this division of responsibility is fundamental to the architecture.
How to Do Salesforce Epic Integration Successfully for Healthcare Organizations
Step 1: Define Integration Pattern
Understand where you should opt for HL7 v2 and where it’s better to use FHIR. It should be clearly documented as well. Understand where you should opt for HL7 v2 and where it’s better to use FHIR. It should be clearly documented as well. Clarity in choosing the right option: HL7 v2 vs FHIR lets you avoid working with fragmented systems, poor data flows, and patchwork integrations which are difficult to maintain after going live. In addition, having an Salesforce governance framework early also helps align roles and controls before integration decisions are finalized.
Step 2: Reconcile Patient Identifiers
Any duplicity or mismatch issues in patient identifiers leads to errors across care, billing, and reporting processes. So, set up a patient identifier reconciliation framework before adding new workflows. A poor identity management will make downstream correction costly and time-consuming, if you already start using records.
Step 3: Centralize Transformation Logic
Handling transformation in MuleSoft or another integration platform will be more ideal than in Salesforce. This architecture enhances the scalability, maintenance procedures, and separation of responsibilities within interconnected systems by keeping this logic separate. Using MuleSoft Direct for Health Cloud prevents mapping overload in Salesforce and supports long-term reliability across complex Epic EHR integration projects.
Step 4: Standardize Terminology Codes
Code sets vary across source systems, and inconsistencies degrade data quality. Therefore, make normalization part of design, and not as a cleanup later. Having it embedded in the architecture allows you to facilitate consistent reporting, reliable analytics, and smoother clinical workflows in Salesforce HL7 integration environments.
Step 5: Embed Monitoring Controls
Silent failures bring in compliance risk and can compromise patient care. But when you’ve visibility across the integration pipeline, issues can be detected quickly and get resolved before they escalate. Therefore, built monitoring and alerting systems into the architecture from the beginning for better detection and faster resolution across the Health Cloud EHR integration process.
Step 6: Test Failure Scenarios
Integration processes can face issues like incomplete data exchange, inaccurate, or delay in connection. Define handling rules for each case and test them before go-live. Teams that validate only successful transactions often miss critical Epic EHR integration failure points, creating risks for patient safety and regulatory compliance.
Step 7: Align Security Standards
Review Salesforce security posture at the planning stage and confirm Salesforce HIPAA compliance before patient data is exchanged. Adding controls after deployment is significantly more difficult. Ensure access policies meet other major regulatory requirements from the outset; it reduces risk and enables smoother audits once Health Cloud EHR integration is live.
Step 8: Validate Interface Specifications
Epic’s HL7 feeds often differ from generic specifications. Confirm interface details with each source system before building workflows. Assuming standard compliance results in failed transactions, inconsistent data exchange, and costly rework once integrations are already deployed.
Step 9: Strengthen Authorization Setup
OAuth configuration frequently fails under load. Configure authorization carefully and test token refresh in realistic conditions. Weak setup causes session drops, blocked transactions, and security gaps that disrupt Health Cloud EHR integration workflows and compromise compliance once patient data begins flowing.
Step 10: Replace Point-to-Point Links
Point to point connections are not scalable. Employ an integration platform to control routing and transformation centrally. Direct links lead to fragile architectures, increase maintenance costs, limit scalability by injecting additional systems and processes into the architecture over time.
Conclusion
Effective Salesforce Epic integration is more than just selecting between HL7 v2 vs FHIR. Organizations need clarity on which problems each standard addresses and where both must operate together. Success depends on strong patient identity reconciliation, disciplined terminology management, and a capable integration layer. With these foundations in place, healthcare teams gain reliable data flows that support clinical accuracy, compliance, and scalable Health Cloud EHR integration.
.gkh-blog{
--gkh-accent:#1a73e8; --gkh-dark:#0f4fa8; --gkh-light:#e8f0fe; --gkh-hl:#f3f7ff;
--gkh-line:#e4e9f2; --gkh-ink:#101828; --gkh-body:#3f4a5a; --gkh-mute:#697586;
--gkh-ok:#0f7a4a; --gkh-ok-bg:#eefaf3; --gkh-ok-line:#c3ead6;
--gkh-warn:#a35c00; --gkh-warn-bg:#fff8ec; --gkh-warn-line:#f5dfb8;
--gkh-r:10px;
font-size:17px; line-height:1.75; color:var(--gkh-body);
-webkit-font-smoothing:antialiased;
}
.gkh-blog *,.gkh-blog *::before,.gkh-blog *::after{box-sizing:border-box;}
.gkh-blog p{margin:0 0 20px;}
.gkh-blog h2{
position:relative; font-size:29px; line-height:1.3; letter-spacing:-.015em;
margin:56px 0 18px; padding-top:16px; color:var(--gkh-ink); font-weight:700; scroll-margin-top:90px;
}
.gkh-blog h2::before{
content:""; position:absolute; top:0; left:0; width:46px; height:4px; border-radius:3px;
background:linear-gradient(90deg,var(--gkh-accent),#5fa0f5);
}
.gkh-blog h3{font-size:20px; line-height:1.38; letter-spacing:-.01em; margin:34px 0 10px; color:var(--gkh-ink); font-weight:700; scroll-margin-top:90px;}
.gkh-blog h4{font-size:16.5px; line-height:1.4; margin:0 0 10px; color:var(--gkh-ink); font-weight:700; scroll-margin-top:90px;}
.gkh-blog h2 + p,.gkh-blog h3 + p{margin-top:0;}
.gkh-blog img{max-width:100%; height:auto; display:block; margin:0 auto; border-radius:var(--gkh-r);}
.gkh-blog hr{border:0; border-top:1px solid var(--gkh-line); margin:44px 0;}
.gkh-blog ul,.gkh-blog ol{margin:0 0 22px; padding:0; list-style:none;}
/* ---- links ---- */
.gkh-blog a{
color:var(--gkh-accent); font-weight:600;
background-image:none !important;
text-decoration:underline !important;
text-decoration-thickness:1px; text-underline-offset:3px;
text-decoration-skip-ink:auto;
transition:color .15s ease, text-decoration-thickness .15s ease;
}
.gkh-blog a:hover,.gkh-blog a:focus-visible{color:var(--gkh-dark); text-decoration-thickness:2px;}
.gkh-blog a:visited{color:var(--gkh-accent);}
.gkh-toc-list a{text-decoration:none !important;}
.gkh-blog a:focus-visible{outline:2px solid var(--gkh-accent); outline-offset:3px; border-radius:3px;}
/* ---- keyword ---- */
.gkh-kw{color:var(--gkh-ink); font-weight:700;}
/* ---- lede ---- */
.gkh-lede{
background:var(--gkh-hl); border-left:4px solid var(--gkh-accent);
border-radius:0 var(--gkh-r) var(--gkh-r) 0;
padding:20px 24px; margin:0 0 26px; font-size:18px; line-height:1.7; color:var(--gkh-ink);
}
.gkh-lede p{margin:0;}
/* ---- table of contents ---- */
.gkh-toc{
border:1px solid var(--gkh-line); border-radius:var(--gkh-r);
background:#fff; padding:20px 24px 8px; margin:30px 0 38px;
}
.gkh-toc-head{
font-size:11px; font-weight:700; letter-spacing:.11em; text-transform:uppercase;
color:var(--gkh-mute); margin:0 0 14px;
}
.gkh-toc-list{counter-reset:gkhtoc; margin:0; padding:0;}
.gkh-toc-list li{counter-increment:gkhtoc; position:relative; padding:0 0 12px 34px; font-size:15.5px; line-height:1.5;}
.gkh-toc-list li::before{
content:counter(gkhtoc,decimal-leading-zero);
position:absolute; left:0; top:1px;
font-size:11px; font-weight:700; color:var(--gkh-accent);
background:var(--gkh-light); border-radius:5px; padding:2px 6px; letter-spacing:.02em;
}
.gkh-toc-list a{color:var(--gkh-body); font-weight:600;}
.gkh-toc-list a:hover{color:var(--gkh-accent); text-decoration:underline !important;}
/* ---- chips ---- */
.gkh-chips{display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:10px; margin:22px 0 26px;}
.gkh-chips li{
display:block; position:relative;
background:var(--gkh-hl); border:1px solid var(--gkh-line); border-radius:8px;
padding:13px 16px 13px 34px; font-size:15px; line-height:1.6; color:var(--gkh-ink);
}
.gkh-chips li::before{
content:""; position:absolute; left:15px; top:21px;
width:6px; height:6px; border-radius:50%; background:var(--gkh-accent);
}
/* ---- split use / avoid panels ---- */
.gkh-split{display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:16px; margin:24px 0 30px; align-items:start;}
.gkh-sc{
position:relative; border:1px solid var(--gkh-line); border-radius:var(--gkh-r);
background:#fff; padding:22px 22px 18px; border-top:3px solid var(--gkh-accent);
transition:box-shadow .18s ease, transform .18s ease;
}
.gkh-sc:hover{box-shadow:0 8px 26px rgba(16,24,40,.08); transform:translateY(-2px);}
.gkh-sc-icon{
width:34px; height:34px; border-radius:8px; margin-bottom:12px;
display:flex; align-items:center; justify-content:center;
}
.gkh-sc-icon svg{width:19px; height:19px;}
.gkh-sc p{font-size:15.5px; line-height:1.68; margin:0;}
.gkh-sc-use{border-top-color:var(--gkh-ok); background:linear-gradient(180deg,var(--gkh-ok-bg) 0%,#fff 78px);}
.gkh-sc-use .gkh-sc-icon{background:#fff; border:1px solid var(--gkh-ok-line); color:var(--gkh-ok);}
.gkh-sc-avoid{border-top-color:var(--gkh-warn); background:linear-gradient(180deg,var(--gkh-warn-bg) 0%,#fff 78px);}
.gkh-sc-avoid .gkh-sc-icon{background:#fff; border:1px solid var(--gkh-warn-line); color:var(--gkh-warn);}
/* ---- tick list ---- */
.gkh-ticks{margin:0; padding:0;}
.gkh-ticks li{
position:relative; padding:0 0 11px 27px; font-size:15.5px; line-height:1.62; color:var(--gkh-body);
}
.gkh-ticks li:last-child{padding-bottom:0;}
.gkh-ticks li::before{
content:""; position:absolute; left:2px; top:7px; width:13px; height:8px;
border-left:2.5px solid var(--gkh-ok); border-bottom:2.5px solid var(--gkh-ok);
transform:rotate(-45deg); border-radius:1px;
}
/* ---- comparison table ---- */
.gkh-table-wrap{
overflow-x:auto; -webkit-overflow-scrolling:touch;
border:1px solid var(--gkh-line); border-radius:var(--gkh-r); margin:24px 0 10px;
}
.gkh-table{width:100%; border-collapse:collapse; min-width:560px; font-size:15px;}
.gkh-table th,.gkh-table td{padding:14px 16px; text-align:left; vertical-align:top; line-height:1.6;}
.gkh-table thead th{
background:var(--gkh-hl); color:var(--gkh-dark);
font-size:11.5px; font-weight:700; letter-spacing:.07em; text-transform:uppercase;
border-bottom:1px solid var(--gkh-line); white-space:nowrap;
}
.gkh-table tbody td{border-top:1px solid var(--gkh-line);}
.gkh-table tbody tr:nth-child(even) td{background:#fbfcfe;}
.gkh-table th:first-child,.gkh-table td:first-child{
position:sticky; left:0; z-index:1;
background:#fff; font-weight:700; color:var(--gkh-ink); font-size:14.5px;
border-right:1px solid var(--gkh-line);
}
.gkh-table thead th:first-child{background:var(--gkh-hl);}
.gkh-table tbody tr:nth-child(even) th:first-child{background:#fbfcfe;}
.gkh-tag{
display:inline-block; font-size:13px; font-weight:600; color:var(--gkh-dark);
background:var(--gkh-light); border:1px solid #d2e2fb; border-radius:6px; padding:3px 10px;
}
.gkh-table-hint{font-size:12.5px; color:var(--gkh-mute); margin:0 0 30px; text-align:right;}
/* ---- callout ---- */
.gkh-callout{
display:flex; gap:14px; align-items:flex-start;
border-radius:var(--gkh-r); padding:18px 22px; margin:20px 0 28px;
font-size:16px; line-height:1.7;
background:var(--gkh-hl); border-left:4px solid var(--gkh-accent); color:var(--gkh-ink);
}
.gkh-callout svg{width:20px; height:20px; flex:0 0 20px; margin-top:4px; color:var(--gkh-accent);}
.gkh-callout p{margin:0;}
/* ---- step timeline ---- */
.gkh-steps{position:relative; margin:28px 0 34px; padding-left:30px;}
.gkh-steps::before{
content:""; position:absolute; left:6px; top:10px; bottom:10px; width:2px;
background:linear-gradient(180deg,var(--gkh-accent),#bcd5f8 85%,transparent);
}
.gkh-step{position:relative; padding:0 0 10px;}
.gkh-step::before{
content:""; position:absolute; left:-30px; top:14px;
width:14px; height:14px; border-radius:50%;
background:#fff; border:3px solid var(--gkh-accent);
box-shadow:0 0 0 4px #fff;
}
.gkh-step h3{font-size:18.5px; margin:26px 0 8px; letter-spacing:-.005em;}
.gkh-step:first-child h3{margin-top:0;}
.gkh-step p{font-size:16px; line-height:1.72; margin:0 0 4px;}
/* ---- closing ---- */
.gkh-takeaway{
background:var(--gkh-hl); border:1px solid var(--gkh-line); border-radius:var(--gkh-r);
padding:22px 26px; margin:24px 0 22px;
}
.gkh-takeaway p{margin:0 0 14px;}
.gkh-takeaway p:last-child{margin:0;}
/* ---- responsive ---- */
@media (max-width:900px){
.gkh-blog h2{font-size:26px; margin-top:46px;}
}
@media (max-width:700px){
.gkh-split{grid-template-columns:1fr;}
}
@media (max-width:640px){
.gkh-blog{font-size:16.5px;}
.gkh-blog h2{font-size:23px;}
.gkh-blog h3{font-size:18.5px;}
.gkh-step h3{font-size:17.5px;}
.gkh-lede{font-size:17px; padding:17px 18px;}
.gkh-toc{padding:18px 18px 6px;}
.gkh-chips{grid-template-columns:1fr;}
.gkh-sc{padding:18px 18px 16px;}
.gkh-takeaway{padding:18px 18px;}
.gkh-callout{padding:16px 18px;}
.gkh-steps{padding-left:24px;}
.gkh-step::before{left:-24px; width:12px; height:12px;}
}
@media (prefers-reduced-motion:reduce){
.gkh-blog *{transition:none !important;}
.gkh-sc:hover{transform:none;}
}
Managing revenue across international regions needs more than scaling sales operations. Transactions occur in different currencies, sometimes within the same reporting cycle. If you don’t have a system i.e. build to handle that complexity, finance and sales risk working from conflicting figures. Salesforce’s multicurrency capabilities offer the right framework. But to fully utilize its potential, you must have a proper Salesforce multi-currency setup.
Global Salesforce setup international requires you to understand what the right steps are to enable multi-currency Salesforce for keeping financial data accurate and transparent across diverse markets. In this Salesforce currency management guide, we explain practical tips for successful configuration and some common mistakes to avoid before starting the migration.
What’s inside
Why Multi-Currency Matters in Global Salesforce Setup
How to Scale International Sales Operations with Salesforce Multi Currency Setup
7 Best Practices for Multi-Currency CRM in International Expansion
Conclusion
Why Multi-Currency Matters in Global Salesforce Setup
Multi-Currency Management lets an organization log transaction in several currencies while still rolling everything up to one reporting standard. For companies selling across borders, currency conversion accuracy touches more than one single deal. Sales Forecasting accuracy depends on it, since pipeline figures need to reflect real exchange rates, not numbers from three months ago. Compliance depends on it too, especially for companies facing audit obligations across different jurisdictions.
There’s also the matter of trust: finance and sales need to be working from the same data, or friction builds fast. Reporting gets cleaner as a result, with teams getting truer insight into what’s happening rather than a distorted version of it. Therefore, with a solid multiple currency configuration, businesses can reduce manual reconciliation. It also prevents departments from reporting conflicting figures, improving forecast accuracy, supporting compliance, and giving leadership confidence in the numbers guiding international growth.
Key Core Concepts of Salesforce Multi Currency Defined
Corporate Currency:
It refers to the main currency used by businesses for consolidated reporting at the HQ level.
Active Currencies:
Regional currencies that reps can select directly when working on data.
Inactive Currencies:
These currencies are stored in file for historical accuracy but are no longer used for daily operations.
Single-Currency vs Multi-Currency:
Single-currency setup considers every transaction happens in one currency. It’s better for domestic operations. Multi-currency handles that variation without forcing agents to work around the system. It works best for global operations.
How to Scale International Sales Operations with Salesforce Multi Currency Setup
Step 1: Activate MultiCurrency in Settings
You can do it by clicking the ‘Setup’ option to see Company Information and check the box for Activate Multiple Currencies.
Step 2: Select Default Currency
Pick the primary currency for rollup reporting. Choose carefully because changing it later makes historical data harder to manage.
Step 3: Enable Currency Settings and Exchange Rates
Using Manage Currencies, add whichever currencies regional teams need. Enter conversion rates against the corporate currency, and don’t let them go outdated. Markets move, and outdated rates quietly undermine everything built on top of them.
Step 4: Assign Currencies to Users and Records
You must set up a ‘default currency’ when assigning a user profile, so new records start off correctly. Verify twice to ensure opportunities, quotes, and related records show the right local currency, then test a few dashboards to confirm it accurately reflects the calculations.
Bonus Tip: Keep a record of every configuration change and get it reviewed by finance. Audit readiness is much easier to maintain than to reconstruct after a gap or miscalculation.
7 Best Practices for Multi-Currency CRM in International Expansion
Keep exchange rates on a fixed update schedule
There’s a constant shift in exchange rates, keep updating them because outdated values distort forecasts. Set an update cycle whether monthly or quarterly and define clear ownership, so the tasks aren’t overlooked. Following a consistent schedule, ensures that pipeline projections and revenue reports show current market conditions rather than outdated records.
Standardize currency fields across every object
Ensure opportunities, quotes, and contracts use the same currency rules. Differences create reconciliation challenges and waste valuable time. Standardize definitions before regional teams begin entering live records. Early alignment prevents reporting issues and gives finance and sales a consistent framework for managing transactions.
Train reps on currency selection early
Teams working across multiple markets need clarity on which currency applies to each deal. Early training ensures opportunities and quotes reflect the right values from the start. A short onboarding session or reference guide reduces mistakes and saves hours of correction work at quarter end.
Build compliance checks into ongoing governance
Currency data flows into audits and financial statements. Including these checks in review cycles protects operations, keeps figures consistent, and ensures the multicurrency setup aligns with external standards. Regular oversight ensures accountability and reduces the risk of errors spreading across markets.
Keep reporting currency and transactional currency distinct
Executives require consolidated reporting in one currency, while sales teams need local reliability for deals. Configuring both correctly avoids friction and unreliable data when comparing regional progress against companywide targets. Clear separation and division in both ensure leadership sees unified numbers without undermining frontline precision.
Archive old currencies instead of deleting them
Past deals remain relevant for audits and analysis. If you delete them, then you erase the historical context. Keep them archived without cluttering the list of active options. Doing so helps you keep Salesforce clean for current users while maintaining the quality of historical records.
Validate MultiCurrency Configuration
Before entering a new market, review and challenge the multicurrency configuration. Simulate transactions and reporting across diverse markets to expose weaknesses. This process validates stability under higher complexity and reveals gaps that should be addressed before they escalate into costly problems.
Conclusion
A properly configured multi-currency setup offers infrastructure that every international deal depends on. Done right; sales, finance, and leadership all work from the same accurate numbers, no matter which region they’re looking at. However, we suggest that before pushing further into new markets, assess your current setup. Check exchange rates, verify currency assignments, and make sure reporting reflects what’s actually happening.
For projects involving complex org structures or multiple business units, seeking Salesforce consulting partners will help. Certified experts will make sure challenges are addressed early on, projects run smoothly, and global operations stay on track.
/* ══════════════════════════════════════════════════════════
Scope: .gkv-blog | Zero JS | Safe for WP columns
══════════════════════════════════════════════════════════ */
.gkv-blog{
--accent:#1a73e8;
--accent-dk:#0f4fa8;
--accent-light:#e8f0fe;
--bg-highlight:#f3f7ff;
--line:#e4e9f2;
--tbl-border:#dde3ec;
--white:#ffffff;
--text-main:#101828;
--text-body:#3f4a5a;
--text-muted:#697586;
--pos-fg:#0a7040; --pos-bg:#e7f5ee; --pos-bd:#bfe3d1;
--mid-fg:#8a5a00; --mid-bg:#fdf4e3; --mid-bd:#f0dcb4;
--neg-fg:#b42318; --neg-bg:#fef3f2; --neg-bd:#fbd5d2;
--amber:#d97706; --amber-bg:#fffaf0; --amber-line:#fcd9a4; --amber-fg:#7c4a03;
width:100%;
box-sizing:border-box;
color:var(--text-body);
line-height:1.75;
font-size:17px;
-webkit-font-smoothing:antialiased;
}
.gkv-blog *,
.gkv-blog *::before,
.gkv-blog *::after{box-sizing:border-box;}
/* ── Typography ───────────────────────────────────────── */
.gkv-blog h2{
font-size:clamp(22px,3.2vw,30px);
line-height:1.28;
font-weight:700;
color:var(--text-main);
letter-spacing:-.015em;
margin:46px 0 16px;
scroll-margin-top:100px;
}
.gkv-blog h3{
font-size:clamp(17px,2.2vw,20px);
line-height:1.4;
font-weight:700;
color:var(--text-main);
letter-spacing:-.01em;
margin:30px 0 10px;
scroll-margin-top:100px;
}
.gkv-blog p{margin:0 0 18px;}
.gkv-blog p:last-child{margin-bottom:0;}
.gkv-blog strong{font-weight:650;color:var(--text-main);}
.gkv-blog .gkv-kw{color:var(--accent-dk);font-weight:650;}
.gkv-blog img{max-width:100%;height:auto;border-radius:12px;}
.gkv-blog a{
color:var(--accent) !important;
font-weight:600;
text-decoration:none;
background-image:linear-gradient(currentColor,currentColor);
background-size:100% 1px;
background-repeat:no-repeat;
background-position:0 100%;
transition:color .18s ease,background-size .18s ease;
}
.gkv-blog a:hover,
.gkv-blog a:focus-visible{color:var(--accent-dk) !important;background-size:100% 2px;}
.gkv-blog a:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:3px;}
.gkv-blog svg{
width:100%;height:100%;display:block;
fill:none;stroke:currentColor;stroke-width:1.8;
stroke-linecap:round;stroke-linejoin:round;
}
/* ── Lede ─────────────────────────────────────────────── */
.gkv-lede{
background:var(--bg-highlight);
border:1px solid var(--line);
border-left:4px solid var(--accent);
border-radius:0 12px 12px 0;
padding:22px 26px;
margin:0 0 24px;
}
.gkv-lede p{
font-size:clamp(17px,2.1vw,19px);
line-height:1.7;
color:var(--text-main);
font-weight:400;
margin:0;
}
/* ── Table of contents ────────────────────────────────── */
.gkv-toc{
background:var(--white);
border:1px solid var(--line);
border-radius:14px;
padding:20px 22px 8px;
margin:28px 0 8px;
box-shadow:0 1px 2px rgba(16,24,40,.04);
}
.gkv-toc-head{
display:flex;align-items:center;gap:9px;
font-size:12px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;
color:var(--text-muted);margin:0 0 14px !important;
}
.gkv-toc-head svg{width:16px;height:16px;flex:0 0 16px;color:var(--accent);stroke-width:2;}
.gkv-toc-list{list-style:none;counter-reset:gkvtoc;margin:0;padding:0;display:grid;gap:2px;}
.gkv-toc-list li{counter-increment:gkvtoc;margin:0;padding:0;}
.gkv-toc-list li::before{content:none;}
.gkv-toc-list a{
display:flex;align-items:baseline;gap:11px;
padding:9px 10px;border-radius:8px;
font-size:15.5px;font-weight:550;
color:var(--text-body) !important;
background-image:none !important;
transition:background-color .15s ease,color .15s ease;
}
.gkv-toc-list a::before{
content:counter(gkvtoc,decimal-leading-zero);
flex:0 0 auto;font-size:12px;font-weight:700;
color:var(--accent);font-variant-numeric:tabular-nums;
}
.gkv-toc-list a:hover{background-color:var(--accent-light);color:var(--accent-dk) !important;}
/* ── Comparison table ─────────────────────────────────── */
.gkv-table-wrap{
overflow-x:auto;-webkit-overflow-scrolling:touch;
border:1px solid var(--line);
border-radius:14px;
margin:24px 0 8px;
box-shadow:0 1px 2px rgba(16,24,40,.04);
}
.gkv-table{
width:100%;min-width:680px;
border-collapse:collapse;
font-size:15.5px;background:var(--white);
}
.gkv-table th,
.gkv-table td{
padding:14px 18px;text-align:left;vertical-align:middle;
border-bottom:1px solid var(--line);
}
.gkv-table thead th{
font-size:12.5px;font-weight:700;
letter-spacing:.06em;text-transform:uppercase;
color:var(--text-muted);
background:#f8fafd;
border-bottom:2px solid var(--line);
white-space:nowrap;
}
.gkv-table tbody th{
font-weight:650;color:var(--text-main);
background:var(--white);
position:sticky;left:0;z-index:1;min-width:200px;
box-shadow:1px 0 0 var(--line);
}
.gkv-table thead th:first-child{position:sticky;left:0;z-index:2;box-shadow:1px 0 0 var(--line);}
.gkv-table tbody tr:nth-child(even) th,
.gkv-table tbody tr:nth-child(even) td{background:#fbfcfe;}
.gkv-table tbody tr:last-child th,
.gkv-table tbody tr:last-child td{border-bottom:none;}
.gkv-pill{
display:inline-block;padding:3px 11px;border-radius:999px;
font-size:13px;font-weight:650;line-height:1.45;white-space:nowrap;
border:1px solid transparent;
}
.gkv-pos{color:var(--pos-fg);background:var(--pos-bg);border-color:var(--pos-bd);}
.gkv-mid{color:var(--mid-fg);background:var(--mid-bg);border-color:var(--mid-bd);}
.gkv-neg{color:var(--neg-fg);background:var(--neg-bg);border-color:var(--neg-bd);}
.gkv-tag{
display:inline-block;padding:3px 11px;border-radius:6px;
font-size:13px;font-weight:650;line-height:1.45;
color:var(--accent-dk);background:var(--accent-light);
border:1px solid #c4dbfb;white-space:nowrap;
}
.gkv-num{
font-variant-numeric:tabular-nums;font-weight:650;
color:var(--text-main);white-space:nowrap;
}
.gkv-table-hint{
font-size:13px;color:var(--text-muted);
margin:10px 0 18px !important;display:none;
}
/* ── Chips ────────────────────────────────────────────── */
.gkv-chips{
list-style:none;
display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));
gap:11px;margin:22px 0 24px;padding:0;
}
.gkv-chips li{
display:flex;align-items:center;gap:11px;
background:var(--white);border:1px solid var(--line);
border-radius:10px;padding:13px 15px;margin:0;
font-size:15.5px;font-weight:550;color:var(--text-main);line-height:1.4;
transition:border-color .15s ease,box-shadow .15s ease,background-color .15s ease;
}
.gkv-chips li::before{
content:"";flex:0 0 8px;width:8px;height:8px;border-radius:50%;
background:linear-gradient(135deg,#5ea2ff,var(--accent));
}
.gkv-chips li:hover{border-color:#b9d2f7;background-color:#fbfdff;box-shadow:0 3px 12px rgba(26,115,232,.09);}
/* ── Prose list ───────────────────────────────────────── */
.gkv-list{list-style:none;margin:22px 0 24px;padding:0;}
.gkv-list li{position:relative;padding:0 0 0 32px;margin:0 0 14px;}
.gkv-list li:last-child{margin-bottom:0;}
.gkv-list li::before{
content:"";position:absolute;left:5px;top:.62em;
width:9px;height:9px;border-radius:2px;
background:linear-gradient(135deg,#5ea2ff,var(--accent));transform:rotate(45deg);
}
/* ── Steps ────────────────────────────────────────────── */
.gkv-steps{list-style:none;counter-reset:gkvstep;margin:26px 0 8px;padding:0;}
.gkv-steps > li{
counter-increment:gkvstep;position:relative;
padding:0 0 26px 60px;margin:0;
}
.gkv-steps > li::before{
content:counter(gkvstep);
position:absolute;left:0;top:-4px;
width:38px;height:38px;border-radius:50%;
background:var(--accent-light);border:1.5px solid #c4dbfb;
color:var(--accent-dk);font-size:14.5px;font-weight:700;
display:flex;align-items:center;justify-content:center;
font-variant-numeric:tabular-nums;
}
.gkv-steps > li::after{
content:"";position:absolute;left:19px;top:40px;bottom:6px;width:1.5px;
background:linear-gradient(180deg,#cfe0fb,#eef3fa);
}
.gkv-steps > li:last-child{padding-bottom:0;}
.gkv-steps > li:last-child::after{display:none;}
.gkv-steps.gkv-plain > li::after{display:none;}
.gkv-steps.gkv-plain > li{padding-bottom:20px;}
/* ── Cards ────────────────────────────────────────────── */
.gkv-cards{
display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));
gap:18px;margin:26px 0 8px;
}
.gkv-card{
position:relative;background:var(--white);
border:1px solid var(--line);border-radius:14px;
padding:24px;overflow:hidden;
transition:border-color .18s ease,box-shadow .18s ease,transform .18s ease;
}
.gkv-card::before{
content:"";position:absolute;inset:0 0 auto 0;height:3px;
background:linear-gradient(90deg,var(--accent),#5ea2ff);
opacity:0;transition:opacity .18s ease;
}
.gkv-card:hover{border-color:#b9d2f7;box-shadow:0 10px 28px rgba(16,24,40,.08);transform:translateY(-2px);}
.gkv-card:hover::before{opacity:1;}
.gkv-card-top{display:flex;align-items:center;gap:13px;margin-bottom:12px;}
.gkv-card-icon{
flex:0 0 40px;width:40px;height:40px;border-radius:10px;
background:var(--accent-light);color:var(--accent);padding:9px;
}
.gkv-card-t{
font-size:clamp(16px,2.2vw,18px);font-weight:700;
color:var(--text-main);line-height:1.35;letter-spacing:-.01em;
}
.gkv-card p{font-size:16px;margin:0;}
/* ── Callout / tip ────────────────────────────────────── */
.gkv-callout{
display:flex;gap:16px;align-items:flex-start;
background:var(--bg-highlight);
border:1px solid #cfe0fb;border-left:4px solid var(--accent);
border-radius:0 12px 12px 0;padding:20px 24px;margin:26px 0;
}
.gkv-callout-icon{flex:0 0 26px;width:26px;height:26px;color:var(--accent);margin-top:3px;}
.gkv-callout p{margin:0;font-size:16.5px;line-height:1.65;color:var(--text-main);}
.gkv-tip{
display:flex;gap:16px;align-items:flex-start;
background:var(--amber-bg);
border:1px solid var(--amber-line);border-left:4px solid var(--amber);
border-radius:0 12px 12px 0;padding:20px 22px;margin:26px 0;
}
.gkv-tip-icon{flex:0 0 26px;width:26px;height:26px;color:var(--amber);margin-top:3px;}
.gkv-tip p{margin:0;font-size:16.5px;line-height:1.65;color:var(--amber-fg);}
/* ── Emphasis / takeaway ──────────────────────────────── */
.gkv-emph{
font-size:clamp(17px,2.1vw,19px);font-weight:600;
color:var(--text-main);line-height:1.6;
border-left:3px solid var(--accent);padding:2px 0 2px 18px;
margin:26px 0 !important;
}
.gkv-takeaway{
background:var(--bg-highlight);border:1px solid #cfe0fb;
border-radius:14px;padding:24px 26px;margin:26px 0 8px;
}
.gkv-takeaway p{
font-size:clamp(16.5px,2.1vw,18px);line-height:1.7;
color:var(--text-main);font-weight:400;margin:0;
}
/* ── CTA ──────────────────────────────────────────────── */
.gkv-cta{
display:flex;align-items:center;justify-content:space-between;
gap:18px;flex-wrap:wrap;
background:var(--bg-highlight);
border:1px solid #cfe0fb;border-left:4px solid var(--accent);
border-radius:0 10px 10px 0;
padding:14px 20px;margin:32px 0;
}
.gkv-cta p{flex:1 1 300px;margin:0;font-size:15.5px;line-height:1.55;color:var(--text-main);}
.gkv-blog .gkv-btn{
flex:0 0 auto;
display:inline-flex;align-items:center;justify-content:center;
padding:10px 20px;border-radius:8px;
font-size:14.5px;font-weight:650;line-height:1.2;text-align:center;
background-color:var(--accent);color:#fff !important;
background-image:none;border:1.5px solid transparent;white-space:nowrap;
box-shadow:0 3px 10px rgba(26,115,232,.28);
transition:transform .16s ease,box-shadow .16s ease,background-color .16s ease;
}
.gkv-blog .gkv-btn:hover,
.gkv-blog .gkv-btn:focus,
.gkv-blog .gkv-btn:focus-visible,
.gkv-blog .gkv-btn:active,
.gkv-blog .gkv-btn:visited{
color:#fff !important;
background-image:none !important;
background-size:0 0 !important;
}
.gkv-blog .gkv-btn:hover,
.gkv-blog .gkv-btn:focus-visible{
transform:translateY(-1px);
background-color:#1668d6;
box-shadow:0 6px 16px rgba(26,115,232,.38);
}
.gkv-blog .gkv-btn:focus-visible{
outline:2px solid var(--accent-dk);
outline-offset:3px;
}
/* ── Responsive ───────────────────────────────────────── */
@media (min-width:640px){
.gkv-toc-list{grid-template-columns:1fr 1fr;column-gap:14px;}
}
@media (max-width:680px){
.gkv-blog{font-size:16px;line-height:1.72;}
.gkv-lede{padding:18px 20px;}
.gkv-callout,.gkv-tip{padding:18px 18px;gap:13px;}
.gkv-takeaway{padding:20px;}
.gkv-card{padding:20px;}
.gkv-card-top{align-items:flex-start;}
.gkv-cta{padding:18px;gap:14px;}
.gkv-blog .gkv-btn{width:100%;}
.gkv-steps > li{padding-left:50px;}
.gkv-steps > li::before{width:34px;height:34px;font-size:13.5px;}
.gkv-steps > li::after{left:17px;top:36px;}
.gkv-table th,.gkv-table td{padding:12px 14px;}
.gkv-table tbody th{min-width:160px;}
.gkv-table-hint{display:block;}
}
@media (max-width:400px){
.gkv-chips,.gkv-cards{grid-template-columns:1fr;}
}
@media (prefers-reduced-motion:reduce){
.gkv-blog *{transition:none !important;}
.gkv-blog .gkv-btn:hover,.gkv-card:hover{transform:none;}
}
@media print{
.gkv-cta{display:none !important;}
.gkv-blog{font-size:11pt;}
.gkv-card,.gkv-table tr,.gkv-steps > li{break-inside:avoid;}
.gkv-table-wrap{overflow:visible;}
.gkv-table{min-width:0;}
}
/* underline fix: real text-decoration, not a background gradient */
.gkv-blog a{
background-image:none !important;
text-decoration:underline !important;
text-decoration-thickness:1px;
text-underline-offset:3px;
text-decoration-skip-ink:auto;
}
.gkv-blog a:hover,.gkv-blog a:focus-visible{text-decoration-thickness:2px;}
.gkv-toc-list a,.gkv-blog .gkv-btn{text-decoration:none !important;}
To say clearing the AppExchange security review is a paperwork step, understates its impact. A failed or delayed review doesn’t just cost engineering time. It costs revenue, strains contractual deadlines, and erodes the trust of a customer who’s already waiting. Therefore, treat AppExchange app submission requirements as a release-readiness testing because that’s what helps your app function as expected. If you push it to the end of the timeline, you spend more time and resources repairing issues in an app than you did in building it.
Across six applications we’ve taken through Salesforce’s AppExchange security review process, one lesson kept repeating: what a clean automated scan tells you and what the review actually demands are two different things. Salesforce doesn’t lean on a single tool to make that call. Reviewers work through static analysis, dynamic testing, and manual inspection carried out by specialists who know how Apex, Lightning components, and third-party integrations behave once they’re deployed together, not in isolated test conditions. In this blog, we’ll explore these lessons in the way we managed to match Salesforce AppExchange requirements. We’ll also share a few practical tips on how to pass the Salesforce security review and common issues to avoid for a successful ISV security review process.
What’s inside
Lessons From Shipping Six Apps Through Salesforce AppExchange Security Review
7 Tips on How to Pass Salesforce Security Review + Common Pitfalls to Avoid
What Does Salesforce Say About AppExchange Security Review Timelines
How Girikon Can Help ISV in Security Review process
Conclusion
Lessons From Shipping Six Apps Through Salesforce AppExchange Security Review
When we went through a Salesforce AppExchange security review, there were few lessons we learned. And now sharing with you all, a quick AppExchange security review checklist:
Lesson 1: A clean static scan doesn’t mean you’re ready
Automated tools miss context-dependent flaws. Sharing rules and object permissions can break in certain setups, even though the scan shows no issues.
Lesson 2: Field-level security gets missed more often
This is in comparison to object-level security. Reviewers check both. Inconsistent field permissions across different profiles come up repeatedly as findings, and they’re entirely avoidable.
Lesson 3: Lightning Web Components carry their own client-side risk
These risks separate from anything a traditional Apex review would catch. Unescaped data binding showed up twice in our submissions. So did insecure use of `lwc:dom` manual mode.
Lesson 4: Integration endpoints need authentication flows
Such endpoints need to be documented and actually tested, not assumed. Undocumented API behavior slows reviewers down, and it tends to invite closer scrutiny of the whole package, not just that one piece.
Lesson 5: Named credentials and connected app settings must match
This helps in showing what’s actually live in the org. Even small mismatches between documentation and configuration will likely stall a review.
Lesson 6: Rushed remediation costs more time than it saves
This is by far the most humbling lesson. Fixing a finding without checking it against the reviewer’s original note is how a second round of review happens. Avoid it.
7 Tips on How to Pass Salesforce Security Review + Common Pitfalls to Avoid
Step 1: Build Security into Design
Security must be embedded in architecture from the start. Teams that design with secure coding principles avoid latestage fixes and reduce review delays. Your AppExchange security review checklists must treat every integration and data flow as a risk surface.
Run threat modeling before development begins
Apply secure coding standards consistently
Avoid leaving security checks until submission
Watch out for overlooked Lightning and clientside risks
Step 2: Run Static Code Analysis
Static scans catch insecure patterns before runtime but aren’t enough alone. Use them to flag obvious flaws, while deeper checks and manual review handle the risks automation cannot.
Enforce linting and security rules
Check dependencies for known vulnerabilities
Don’t assume a clean scan guarantees approval
Manually review code that trigger issue instead of skipping it
Step 3: Conduct Dynamic Security Testing (DAST)
Runtime testing shows issues static scans miss. It flags injection flaws, weak session handling, and risks that only appear when the app runs in real conditions.
Run authenticated DAST tests on your app
Validate session and token handling thoroughly
Avoid relying only on static analysis results
Pay attention to runtime injection vulnerabilities
Step 4: Perform Manual Validation
Human review can spot logic flaws and configuration mistakes that automated tools miss. Manual checks of Lightning components and API flows bring out risks that only appear in real use.
Carry out peer code reviews
Walk through Lightning components manually
Resist the urge to skip validation under deadline pressure
Don’t assume automation covers business logic
Step 5: Ensure Submission Readiness
A package must be complete, consistent, and accessible. Reviewers reject submissions with missing metadata, broken credentials, or incomplete documentation.
Provide working test org credentials
Attach full metadata and package notes
Check that login details are current before submission
Keep documentation complete and up to date
Step 6: Remediate and Retest Thoroughly
The results regarding security or performance issues are expected. What matters is how they’re fixed and at what stage. Document remediation clearly, retest to confirm, and avoid partial or delayed corrections. It’s important that you’ve a proper trail because reviewers want proof of closure.
Keep detailed remediation logs
Retest and record evidence for each fix
Never submit without proof of remediation
Close out all known issues before resubmitting
Step 7: Document Everything for Review
Clear documentation speeds approval. It’s very common for reviewers to know how issues were identified, fixed, and validated. A structured security report reduces backandforth cycles.
Provide complete security test reports
Add remediation and validation notes
Avoid vague or generic documentation
Always include evidence of fixes
What Does Salesforce Say About AppExchange Security Review Timelines
The published guidelines by Salesforce AppExchange review timeline point to “several weeks” as a rough benchmark. So, there’s no fixed timeline. The timing shifts depend on app complexity, how many integrations are involved, and how many rounds of remediation get triggered. Teams that plan around the most optimistic estimate tend to miss their own launch dates. Building in buffer time isn’t excessive caution; it’s a reasonable response to a process that’s genuinely unpredictable.
How Girikon Can Help ISV in Security Review process
For ISVs, clearing Salesforce’s AppExchange security review is often the most critical step before launching. Girikon supports ISVs by combining technical expertise with structured preparation, ensuring that vulnerabilities are addressed early, submissions are complete, and documentation meets Salesforce’s AppExchange app submission requirements.
Why Our Salesforce Consulting Services:
Competent AppExchange security review checklist helps your business reduce review cycles, avoid costly delays, and gives teams confidence in their release readiness
Proven track record of guiding multiple ISVs through successful listings
Deep Salesforce platform knowledge that aligns with reviewer expectations
Tailored presubmission framework to cut down review cycles
Endtoend support from vulnerability assessment to documentation delivery
Conclusion
It’s very evident that passing an AppExchange security review isn’t about surviving a scan. Meeting AppExchange app submission requirements is about building an app that holds up under the same scrutiny Salesforce applies internally, before that scrutiny arrives. As a business, you must understand that the Salesforce ISV security review process brings positive results only when security is considered a design decision, not a submission-stage fix.
Hopefully, this blog has given you an understanding of how to pass the Salesforce security review successfully. Our AppExchange security review checklist will also give your business the confidence to launch without friction and the assurance that review won’t become a roadblock to growth.
/* ══════════════════════════════════════════════════════════
Scope: .gka-blog | Zero JS | Safe for WP columns
══════════════════════════════════════════════════════════ */
.gka-blog{
--accent:#1a73e8;
--accent-dk:#0f4fa8;
--accent-light:#e8f0fe;
--bg-highlight:#f3f7ff;
--line:#e4e9f2;
--tbl-border:#dde3ec;
--white:#ffffff;
--text-main:#101828;
--text-body:#3f4a5a;
--text-muted:#697586;
--pos-fg:#0a7040; --pos-bg:#e7f5ee; --pos-bd:#bfe3d1;
--mid-fg:#8a5a00; --mid-bg:#fdf4e3; --mid-bd:#f0dcb4;
--neg-fg:#b42318; --neg-bg:#fef3f2; --neg-bd:#fbd5d2;
--amber:#d97706; --amber-bg:#fffaf0; --amber-line:#fcd9a4; --amber-fg:#7c4a03;
width:100%;
box-sizing:border-box;
color:var(--text-body);
line-height:1.75;
font-size:17px;
-webkit-font-smoothing:antialiased;
}
.gka-blog *,
.gka-blog *::before,
.gka-blog *::after{box-sizing:border-box;}
/* ── Typography ───────────────────────────────────────── */
.gka-blog h2{
font-size:clamp(22px,3.2vw,30px);
line-height:1.28;
font-weight:700;
color:var(--text-main);
letter-spacing:-.015em;
margin:46px 0 16px;
scroll-margin-top:100px;
}
.gka-blog h3{
font-size:clamp(17px,2.2vw,20px);
line-height:1.4;
font-weight:700;
color:var(--text-main);
letter-spacing:-.01em;
margin:30px 0 10px;
scroll-margin-top:100px;
}
.gka-blog p{margin:0 0 18px;}
.gka-blog p:last-child{margin-bottom:0;}
.gka-blog strong{font-weight:650;color:var(--text-main);}
.gka-blog .gka-kw{color:var(--accent-dk);font-weight:650;}
.gka-blog img{max-width:100%;height:auto;border-radius:12px;}
/* ── Links ────────────────────────────────────────────── */
.gka-blog a{
color:var(--accent) !important;
font-weight:600;
text-decoration:none;
background-image:linear-gradient(currentColor,currentColor);
background-size:100% 1px;
background-repeat:no-repeat;
background-position:0 100%;
transition:color .18s ease,background-size .18s ease;
}
.gka-blog a:hover,
.gka-blog a:focus-visible{color:var(--accent-dk) !important;background-size:100% 2px;}
.gka-blog a:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:3px;}
/* ── Shared SVG defaults ──────────────────────────────── */
.gka-blog svg{
width:100%;height:100%;display:block;
fill:none;stroke:currentColor;stroke-width:1.8;
stroke-linecap:round;stroke-linejoin:round;
}
/* ── Lede ─────────────────────────────────────────────── */
.gka-lede{
background:var(--bg-highlight);
border:1px solid var(--line);
border-left:4px solid var(--accent);
border-radius:0 12px 12px 0;
padding:22px 26px;
margin:0 0 24px;
}
.gka-lede p{
font-size:clamp(17px,2.1vw,19px);
line-height:1.7;
color:var(--text-main);
font-weight:400;
margin:0;
}
/* ── Table of contents ────────────────────────────────── */
.gka-toc{
background:var(--white);
border:1px solid var(--line);
border-radius:14px;
padding:20px 22px 8px;
margin:28px 0 8px;
box-shadow:0 1px 2px rgba(16,24,40,.04);
}
.gka-toc-head{
display:flex;align-items:center;gap:9px;
font-size:12px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;
color:var(--text-muted);margin:0 0 14px !important;
}
.gka-toc-head svg{width:16px;height:16px;flex:0 0 16px;color:var(--accent);stroke-width:2;}
.gka-toc-list{list-style:none;counter-reset:gkatoc;margin:0;padding:0;display:grid;gap:2px;}
.gka-toc-list li{counter-increment:gkatoc;margin:0;padding:0;}
.gka-toc-list li::before{content:none;}
.gka-toc-list a{
display:flex;align-items:baseline;gap:11px;
padding:9px 10px;border-radius:8px;
font-size:15.5px;font-weight:550;
color:var(--text-body) !important;
background-image:none !important;
transition:background-color .15s ease,color .15s ease;
}
.gka-toc-list a::before{
content:counter(gkatoc,decimal-leading-zero);
flex:0 0 auto;font-size:12px;font-weight:700;
color:var(--accent);font-variant-numeric:tabular-nums;
}
.gka-toc-list a:hover{background-color:var(--accent-light);color:var(--accent-dk) !important;}
/* ── Comparison table ─────────────────────────────────── */
.gka-table-wrap{
overflow-x:auto;-webkit-overflow-scrolling:touch;
border:1px solid var(--line);
border-radius:14px;
margin:24px 0 8px;
box-shadow:0 1px 2px rgba(16,24,40,.04);
}
.gka-table{
width:100%;min-width:680px;
border-collapse:collapse;
font-size:15.5px;background:var(--white);
}
.gka-table th,
.gka-table td{
padding:14px 18px;text-align:left;vertical-align:middle;
border-bottom:1px solid var(--line);
}
.gka-table thead th{
font-size:12.5px;font-weight:700;
letter-spacing:.06em;text-transform:uppercase;
color:var(--text-muted);
background:#f8fafd;
border-bottom:2px solid var(--line);
white-space:nowrap;
}
.gka-table tbody th{
font-weight:650;color:var(--text-main);
background:var(--white);
position:sticky;left:0;z-index:1;min-width:200px;
box-shadow:1px 0 0 var(--line);
}
.gka-table thead th:first-child{position:sticky;left:0;z-index:2;box-shadow:1px 0 0 var(--line);}
.gka-table tbody tr:nth-child(even) th,
.gka-table tbody tr:nth-child(even) td{background:#fbfcfe;}
.gka-table tbody tr:last-child th,
.gka-table tbody tr:last-child td{border-bottom:none;}
.gka-pill{
display:inline-block;padding:3px 11px;border-radius:999px;
font-size:13px;font-weight:650;line-height:1.45;white-space:nowrap;
border:1px solid transparent;
}
.gka-pos{color:var(--pos-fg);background:var(--pos-bg);border-color:var(--pos-bd);}
.gka-mid{color:var(--mid-fg);background:var(--mid-bg);border-color:var(--mid-bd);}
.gka-neg{color:var(--neg-fg);background:var(--neg-bg);border-color:var(--neg-bd);}
.gka-table-hint{
font-size:13px;color:var(--text-muted);
margin:10px 0 18px !important;display:none;
}
/* ── Chip list ────────────────────────────────────────── */
.gka-chips{
list-style:none;
display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));
gap:11px;margin:22px 0 24px;padding:0;
}
.gka-chips li{
display:flex;align-items:center;gap:11px;
background:var(--white);border:1px solid var(--line);
border-radius:10px;padding:13px 15px;margin:0;
font-size:15.5px;font-weight:550;color:var(--text-main);line-height:1.4;
transition:border-color .15s ease,box-shadow .15s ease,background-color .15s ease;
}
.gka-chips li::before{
content:"";flex:0 0 8px;width:8px;height:8px;border-radius:50%;
background:linear-gradient(135deg,#5ea2ff,var(--accent));
}
.gka-chips li:hover{border-color:#b9d2f7;background-color:#fbfdff;box-shadow:0 3px 12px rgba(26,115,232,.09);}
/* ── Bullet list (prose length) ───────────────────────── */
.gka-list{list-style:none;margin:22px 0 24px;padding:0;}
.gka-list li{position:relative;padding:0 0 0 32px;margin:0 0 14px;}
.gka-list li:last-child{margin-bottom:0;}
.gka-list li::before{
content:"";position:absolute;left:5px;top:.62em;
width:9px;height:9px;border-radius:2px;
background:linear-gradient(135deg,#5ea2ff,var(--accent));transform:rotate(45deg);
}
/* ── Numbered step timeline ───────────────────────────── */
.gka-steps{list-style:none;counter-reset:gkastep;margin:26px 0 8px;padding:0;}
.gka-steps > li{
counter-increment:gkastep;position:relative;
padding:0 0 26px 60px;margin:0;
}
.gka-steps > li::before{
content:counter(gkastep);
position:absolute;left:0;top:-4px;
width:38px;height:38px;border-radius:50%;
background:var(--accent-light);border:1.5px solid #c4dbfb;
color:var(--accent-dk);font-size:14.5px;font-weight:700;
display:flex;align-items:center;justify-content:center;
font-variant-numeric:tabular-nums;
}
.gka-steps > li::after{
content:"";position:absolute;left:19px;top:40px;bottom:6px;width:1.5px;
background:linear-gradient(180deg,#cfe0fb,#eef3fa);
}
.gka-steps > li:last-child{padding-bottom:0;}
.gka-steps > li:last-child::after{display:none;}
.gka-steps.gka-plain > li::after{display:none;}
.gka-steps.gka-plain > li{padding-bottom:20px;}
/* ── Capability / definition cards ────────────────────── */
.gka-cards{
display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));
gap:18px;margin:26px 0 8px;
}
.gka-card{
position:relative;background:var(--white);
border:1px solid var(--line);border-radius:14px;
padding:24px;overflow:hidden;
transition:border-color .18s ease,box-shadow .18s ease,transform .18s ease;
}
.gka-card::before{
content:"";position:absolute;inset:0 0 auto 0;height:3px;
background:linear-gradient(90deg,var(--accent),#5ea2ff);
opacity:0;transition:opacity .18s ease;
}
.gka-card:hover{border-color:#b9d2f7;box-shadow:0 10px 28px rgba(16,24,40,.08);transform:translateY(-2px);}
.gka-card:hover::before{opacity:1;}
.gka-card-top{display:flex;align-items:center;gap:13px;margin-bottom:12px;}
.gka-card-icon{
flex:0 0 40px;width:40px;height:40px;border-radius:10px;
background:var(--accent-light);color:var(--accent);padding:9px;
}
.gka-card-t{
font-size:clamp(16px,2.2vw,18px);font-weight:700;
color:var(--text-main);line-height:1.35;letter-spacing:-.01em;
}
.gka-card p{font-size:16px;margin:0;}
/* ── Callouts ─────────────────────────────────────────── */
.gka-callout{
display:flex;gap:16px;align-items:flex-start;
background:var(--bg-highlight);
border:1px solid #cfe0fb;border-left:4px solid var(--accent);
border-radius:0 12px 12px 0;padding:20px 24px;margin:26px 0;
}
.gka-callout-icon{flex:0 0 26px;width:26px;height:26px;color:var(--accent);margin-top:3px;}
.gka-callout p{margin:0;font-size:16.5px;line-height:1.65;color:var(--text-main);}
.gka-tip{
display:flex;gap:16px;align-items:flex-start;
background:var(--amber-bg);
border:1px solid var(--amber-line);border-left:4px solid var(--amber);
border-radius:0 12px 12px 0;padding:20px 22px;margin:26px 0;
}
.gka-tip-icon{flex:0 0 26px;width:26px;height:26px;color:var(--amber);margin-top:3px;}
.gka-tip p{margin:0;font-size:16.5px;line-height:1.65;color:var(--amber-fg);}
.gka-emph{
font-size:clamp(17px,2.1vw,19px);font-weight:600;
color:var(--text-main);line-height:1.6;
border-left:3px solid var(--accent);padding:2px 0 2px 18px;
margin:26px 0 !important;
}
/* ── Takeaway ─────────────────────────────────────────── */
.gka-takeaway{
background:var(--bg-highlight);border:1px solid #cfe0fb;
border-radius:14px;padding:24px 26px;margin:26px 0 8px;
}
.gka-takeaway p{
font-size:clamp(16.5px,2.1vw,18px);line-height:1.7;
color:var(--text-main);font-weight:400;margin:0;
}
/* ── Slim inline CTA ──────────────────────────────────── */
.gka-cta{
display:flex;align-items:center;justify-content:space-between;
gap:18px;flex-wrap:wrap;
background:var(--bg-highlight);
border:1px solid #cfe0fb;border-left:4px solid var(--accent);
border-radius:0 10px 10px 0;
padding:14px 20px;margin:32px 0;
}
.gka-cta p{flex:1 1 300px;margin:0;font-size:15.5px;line-height:1.55;color:var(--text-main);}
.gka-blog .gka-btn{
flex:0 0 auto;
display:inline-flex;align-items:center;justify-content:center;
padding:10px 20px;border-radius:8px;
font-size:14.5px;font-weight:650;line-height:1.2;text-align:center;
background-color:var(--accent);color:#fff !important;
background-image:none;border:1.5px solid transparent;white-space:nowrap;
box-shadow:0 3px 10px rgba(26,115,232,.28);
transition:transform .16s ease,box-shadow .16s ease,background-color .16s ease;
}
/* must out-specify `.blog a:hover` (0,2,1) or the label repaints blue-on-blue */
.gka-blog .gka-btn:hover,
.gka-blog .gka-btn:focus,
.gka-blog .gka-btn:focus-visible,
.gka-blog .gka-btn:active,
.gka-blog .gka-btn:visited{
color:#fff !important;
background-image:none !important;
background-size:0 0 !important;
}
.gka-blog .gka-btn:hover,
.gka-blog .gka-btn:focus-visible{
transform:translateY(-1px);
background-color:#1668d6;
box-shadow:0 6px 16px rgba(26,115,232,.38);
}
.gka-blog .gka-btn:focus-visible{
outline:2px solid var(--accent-dk);
outline-offset:3px;
}
/* ══════════════ RESPONSIVE ══════════════ */
@media (min-width:640px){
.gka-toc-list{grid-template-columns:1fr 1fr;column-gap:14px;}
}
@media (max-width:680px){
.gka-blog{font-size:16px;line-height:1.72;}
.gka-lede{padding:18px 20px;}
.gka-callout,.gka-tip{padding:18px 18px;gap:13px;}
.gka-takeaway{padding:20px;}
.gka-card{padding:20px;}
.gka-card-top{align-items:flex-start;}
.gka-cta{padding:18px;gap:14px;}
.gka-blog .gka-btn{width:100%;}
.gka-steps > li{padding-left:50px;}
.gka-steps > li::before{width:34px;height:34px;font-size:13.5px;}
.gka-steps > li::after{left:17px;top:36px;}
.gka-table th,.gka-table td{padding:12px 14px;}
.gka-table tbody th{min-width:160px;}
.gka-table-hint{display:block;}
}
@media (max-width:400px){
.gka-chips,.gka-cards{grid-template-columns:1fr;}
}
/* Motion / print safety */
@media (prefers-reduced-motion:reduce){
.gka-blog *{transition:none !important;}
.gka-blog .gka-btn:hover,.gka-card:hover{transform:none;}
}
@media print{
.gka-cta{display:none !important;}
.gka-blog{font-size:11pt;}
.gka-card,.gka-table tr,.gka-steps > li{break-inside:avoid;}
.gka-table-wrap{overflow:visible;}
.gka-table{min-width:0;}
}
Salesforce and SAP perform different functions inside a large organization. Salesforce handles the customer-facing side of the business deals, relationships, service cases. SAP runs everything underneath: finance, inventory, logistics network, order fulfilment. When you fail in Salesforce SAP integration, the impact is gradual but significant. Your organization faces duplicate work, delayed orders, and support teams depending on outdated information. This disconnect erodes both efficiency and customer trust.
This is why SAP Salesforce data sync is critical. Integration ensures revenue visibility, accurate operations, and consistent customer experience. For better results, the best method is to know how much data you’re moving, what your security requirements look like, and how urgently that data needs to move. To help you understand what the Salesforce SAP integration patterns enterprises rely on today, we discuss them in detail. In addition, we’ll share a few Salesforce SAP integration best practices.
What’s inside
Why Salesforce and SAP Integration is Critical for the Enterprise
What are Salesforce SAP Integration Patterns?
7 Steps for Salesforce SAP integration to Get Real-time Enterprise Data Sync
Conclusion
Why Salesforce and SAP Integration is Critical for the Enterprise
At the most basic level, this SAP CRM Integration enterprise closes the gap between what sales know about the sales cycle and what’s actually true on the operations side. Get it right and order-to-cash speeds up noticeably. You get other benefits like:
Agents get real-time data and start working from a solid customer 360 view.
Inventory figures become trustworthy.
Pricing reflects the present instead of last week.
Certain use cases recur across nearly every industry: automating order-to-cash, giving sales live visibility into stock, unifying customer records, validating pricing during the quoting process itself. In silos, these are hard to pull off. SAP carries enormous data volume, and its schema resists mapping cleanly onto Salesforce objects. Its authorization structure is hard to work around. Layer real-time performance expectations on top, and it becomes clear why integration projects so often lose impact before delivering anything meaningful.
What are Salesforce SAP Integration Patterns?
Real‑Time Request/Reply
Event‑Driven Integration
Batch Synchronization
Virtualized Data Access
Middleware‑Orchestrated Workflows
Real‑Time Request/Reply
A synchronous REST or SOAP call triggers the moment someone needs an answer, checking a credit limit mid-quote, confirming stock before an agent gives a delivery date. Customers cannot be put on hold, which is exactly the point. Under heavy traffic, poor design slows both sides. Best applied where immediate accuracy safeguards revenue and customer commitments are needed.
Event‑Driven Integration
Rather than one system sitting idle while waiting on the other, it relies on publish-subscribe messaging, typically Salesforce Change Data Capture paired with SAP Event Mesh, running over Kafka or AMQP. High-volume updates suit this well, and the platforms stay loosely connected instead of tightly bound together. What is at stake is an instant agreement. A brief lag exists before both sides notice; a cost most enterprises accept when scalability is the priority.
Batch Synchronization
The pattern focuses on if the data actually needs to move right now. Often, it doesn’t. Bulk transfers on a fixed schedule, usually through Bulk API or standard ETL tools, handle product data sets or historical order records perfectly well, since these rarely shift hour to hour. Running it costs little and barely goes over system limits. One actual limitation of this pattern is that it doesn’t offer real-time visibility, but it could still work as long as it’s not needed by the use case.
Virtualized Data Access
This is more of an invisible pattern. SAP data—invoice history, shipment status—shows up inside Salesforce screens without ever being duplicated or stored there. Salesforce-side storage costs vanish entirely under this model. What replaces that cost is dependency: the whole arrangement only works when SAP’s endpoint stays available and responsive, which needs consideration before relying on it too heavily. Businesses often use it when visibility is needed without replication, but only if SAP uptime can be trusted.
Middleware‑Orchestrated Workflows
Middleware-orchestrated workflows step in once a process crosses multiple systems and steps like lead-to-order. A simple point-to-point connection cannot hold up under too much complexity. Platforms like MuleSoft, SAP Integration Suite, or Celigo take over the transformations, error handling, and coordination across systems; legacy platforms included. Strong governance and pre‑built connectors come bundled with this approach. For enterprises, the draw is reliability across complex processes, even if licensing adds overhead.
Most enterprises need two or three of these patterns, not one.
Tell us your data volumes, latency expectations and middleware estate. We will map which pattern belongs where before a single line of integration code gets written.
Map my integration
7 Steps for Salesforce SAP integration to Get Real-time Enterprise Data Sync
Clarify data ownership
Define, in writing, where the authoritative version of each data set will reside. The customer master data is controlled by SAP and leads and opportunities by Salesforce. If your team doesn’t have this clarity, more than one version of the same record is likely to emerge, and it becomes harder to resolve them than preventing them initially.
Match API frequency to actual need
Combining batch processing with Change Data Capture keeps consumption within Salesforce governor limits while data stays reasonably current. Not every update requires a real-time call. Reserve that for cases where immediacy genuinely matters to the business outcome.
Failure and recovery management
Resilience doesn’t come from avoiding failures but from detecting them on time and correcting them quickly. There will be many possibilities of failures you could encounter connections may drop, end points may fire timeout, records may fail validation for unanticipated reasons, and so forth. Automated retries, alerting systems, and graceful degradation give teams early visibility into failures and provide control before issues escalate.
Enable security by design
End-to-end encryption, authentication, and alignment with existing security policies belong in the initial design, not added later. Given the volume of financial and customer data involved, shortcuts here create liabilities that surface at inconvenient times, exposing your customer and brand to compliance risks and fines.
Invest time in field mapping early
SAP and Salesforce objects rarely align without adjustment. Careful attention to data types, naming conventions, and field ownership before development begins prevents costly rework once mismatches surface downstream after launch.
Test using production-scale data
A small, clean sandbox cannot reveal real performance issues. Governor limits, timeouts, and throughput bottlenecks typically appear only under genuine volume. Testing closer to actual scale before go-live catches problems while they remain less costly to fix.
Prepare teams for the operational shift
New data flows bring a shift in daily workflows, and that change doesn’t happen automatically once systems connect. Clear documentation, structured training, and a defined support path determine whether the integration delivers its intended value or not.
Conclusion
Every SAP Salesforce integration is different, so treating any single pattern as the default mode wouldn’t deliver the expected result. Most enterprises often go the hybrid way, stitching two or three approaches together based on what their systems demand. Ignoring factors like data volume, latency, and team’s actual capacity to manage that complexity once it’s live, not just at launch. The better strategy is to conduct an audit of the existing tech stack. Understand the gaps and the cost of it.
However, not all businesses have the bandwidth to run that audit properly, for more effective review of your infrastructure and the best solution, consider specialists. They have worked through SAP Salesforce data sync projects and can spot patterns and pitfalls faster than a team encountering them for the first time, which often saves both time and money in the long run.
Salesforce Integration Services
Get the pattern right before you get the code wrong.
Girikon is a certified Salesforce consulting partner with MuleSoft and enterprise integration experience. We audit your existing stack, define data ownership across SAP and Salesforce, and build the sync layer with retries, monitoring and security designed in from day one.
Integration audit & pattern selection
MuleSoft and middleware orchestration
Real-time, event-driven & batch sync
Field mapping, testing & go-live support
Book a free integration audit
Explore integration services
Scoping a project now? Call +1‑480‑241‑8198 (USA)
/* ══════════════════════════════════════════════════════════
Salesforce SAP Integration — blog styles
Scope: .gki-blog | Zero JS | Safe for WP columns
══════════════════════════════════════════════════════════ */
.gki-blog{
--accent:#1a73e8;
--accent-dk:#0f4fa8;
--accent-light:#e8f0fe;
--navy:#0d1f38;
--navy-2:#122b4d;
--bg-highlight:#f3f7ff;
--line:#e4e9f2;
--white:#ffffff;
--text-main:#101828;
--text-body:#3f4a5a;
--text-muted:#697586;
--alt:#6d4bd8;
--alt-light:#f0ecfd;
--pro:#0d8f7a;
--pro-light:#e3f6f2;
--pro-line:#b7e3da;
width:100%;
box-sizing:border-box;
font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
color:var(--text-body);
line-height:1.75;
font-size:17px;
-webkit-font-smoothing:antialiased;
}
.gki-blog *,
.gki-blog *::before,
.gki-blog *::after{box-sizing:border-box;}
/* ── Typography ───────────────────────────────────────── */
.gki-blog h2{
font-size:clamp(22px,3.2vw,30px);
line-height:1.28;
font-weight:700;
color:var(--text-main);
letter-spacing:-.015em;
margin:46px 0 16px;
scroll-margin-top:100px;
}
.gki-blog h3{
font-size:clamp(17px,2.2vw,20px);
line-height:1.38;
font-weight:700;
color:var(--text-main);
letter-spacing:-.01em;
margin:0 0 10px;
scroll-margin-top:100px;
}
.gki-blog p{margin:0 0 18px;}
.gki-blog p:last-child{margin-bottom:0;}
.gki-blog strong{font-weight:650;color:var(--text-main);}
.gki-blog img{max-width:100%;height:auto;border-radius:12px;}
/* ── Links ────────────────────────────────────────────── */
.gki-blog a{
color:var(--accent);
font-weight:600;
text-decoration:none;
background-image:linear-gradient(currentColor,currentColor);
background-size:100% 1px;
background-repeat:no-repeat;
background-position:0 100%;
transition:color .18s ease,background-size .18s ease;
}
.gki-blog a:hover,
.gki-blog a:focus-visible{color:var(--accent-dk);background-size:100% 2px;}
.gki-blog a:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:3px;}
/* ── Shared SVG defaults ──────────────────────────────── */
.gki-blog svg{
width:100%;height:100%;display:block;
fill:none;stroke:currentColor;stroke-width:1.8;
stroke-linecap:round;stroke-linejoin:round;
}
/* ── Lede ─────────────────────────────────────────────── */
.gki-lede{
background:var(--bg-highlight);
border:1px solid var(--line);
border-left:4px solid var(--accent);
border-radius:0 12px 12px 0;
padding:22px 26px;
margin:0 0 24px;
}
.gki-lede p{
font-size:clamp(17px,2.1vw,19px);
line-height:1.7;
color:var(--text-main);
font-weight:400;
}
/* ── Buttons ──────────────────────────────────────────── */
.gki-blog .gki-btn{
display:inline-flex;align-items:center;justify-content:center;gap:8px;
padding:12px 22px;border-radius:8px;
font-size:15px;font-weight:650;line-height:1.2;text-align:center;
background-image:none;border:1.5px solid transparent;
transition:transform .16s ease,box-shadow .16s ease,background-color .16s ease,color .16s ease,border-color .16s ease;
}
.gki-blog .gki-btn:hover{transform:translateY(-1px);background-size:0 0;}
.gki-blog .gki-btn-solid{
background-color:var(--accent);color:#fff !important;
box-shadow:0 4px 14px rgba(26,115,232,.32);
}
.gki-blog .gki-btn-solid:hover{background-color:#1668d6;box-shadow:0 7px 20px rgba(26,115,232,.42);}
.gki-blog .gki-btn-light{
background-color:#fff;color:var(--navy) !important;
box-shadow:0 4px 14px rgba(0,0,0,.18);
}
.gki-blog .gki-btn-light:hover{background-color:#eef4ff;}
.gki-blog .gki-btn-ghost{
background-color:transparent;color:#dbe7f7 !important;
border-color:rgba(255,255,255,.32);
}
.gki-blog .gki-btn-ghost:hover{border-color:#fff;color:#fff !important;background-color:rgba(255,255,255,.08);}
/* ── Table of contents ────────────────────────────────── */
.gki-toc{
background:var(--white);
border:1px solid var(--line);
border-radius:14px;
padding:20px 22px 8px;
margin:28px 0 8px;
box-shadow:0 1px 2px rgba(16,24,40,.04);
}
.gki-toc-head{
display:flex;align-items:center;gap:9px;
font-size:12px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;
color:var(--text-muted);margin:0 0 14px !important;
}
.gki-toc-head svg{width:16px;height:16px;flex:0 0 16px;color:var(--accent);stroke-width:2;}
.gki-toc-list{
list-style:none;counter-reset:gkitoc;
margin:0;padding:0;display:grid;gap:2px;
}
.gki-toc-list li{counter-increment:gkitoc;margin:0;padding:0;}
.gki-toc-list li::before{content:none;}
.gki-toc-list a{
display:flex;align-items:baseline;gap:11px;
padding:9px 10px;border-radius:8px;
font-size:15.5px;font-weight:550;
color:var(--text-body) !important;
background-image:none !important;
transition:background-color .15s ease,color .15s ease;
}
.gki-toc-list a::before{
content:counter(gkitoc,decimal-leading-zero);
flex:0 0 auto;font-size:12px;font-weight:700;
color:var(--accent);font-variant-numeric:tabular-nums;
}
.gki-toc-list a:hover{background-color:var(--accent-light);color:var(--accent-dk) !important;}
/* ── Wins list ────────────────────────────────────────── */
.gki-wins{
list-style:none;margin:22px 0;padding:0;
display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:11px;
}
.gki-wins li{
position:relative;margin:0;
padding:14px 16px 14px 46px;
background:var(--white);
border:1px solid var(--line);
border-radius:11px;
font-size:15.5px;line-height:1.5;
color:var(--text-main);
transition:border-color .15s ease,box-shadow .15s ease;
}
.gki-wins li::before{
content:"";position:absolute;left:15px;top:19px;
width:13px;height:7px;
border-left:2.4px solid var(--pro);
border-bottom:2.4px solid var(--pro);
transform:rotate(-45deg);
}
.gki-wins li:hover{border-color:var(--pro-line);box-shadow:0 3px 12px rgba(13,143,122,.10);}
/* ── Pattern jump chips ───────────────────────────────── */
.gki-jump{
list-style:none;
display:flex;flex-wrap:wrap;gap:9px;
margin:20px 0 26px;padding:0;
}
.gki-jump li{margin:0;padding:0;}
.gki-jump a{
display:inline-block;
padding:8px 15px;
border-radius:99px;
background:var(--alt-light);
border:1px solid #ddd3fa;
font-size:14px;font-weight:600;
color:var(--alt) !important;
background-image:none !important;
transition:background-color .15s ease,border-color .15s ease,transform .15s ease;
}
.gki-jump a:hover{
background-color:#e6dffb;
border-color:#c6b6f5;
transform:translateY(-1px);
}
/* ── Pattern cards ────────────────────────────────────── */
.gki-patterns{display:grid;gap:16px;margin:0 0 8px;}
.gki-pattern{
position:relative;
background:var(--white);
border:1px solid var(--line);
border-left:4px solid var(--alt);
border-radius:0 13px 13px 0;
padding:22px 24px;
transition:border-color .18s ease,box-shadow .18s ease,transform .18s ease;
}
.gki-pattern:hover{
border-color:#c6b6f5;
border-left-color:var(--alt);
box-shadow:0 8px 26px rgba(109,75,216,.10);
transform:translateY(-2px);
}
.gki-pattern-top{
display:flex;align-items:center;gap:13px;
margin-bottom:12px;
}
.gki-pattern-icon{
flex:0 0 40px;width:40px;height:40px;
border-radius:10px;padding:9px;
background:var(--alt-light);
color:var(--alt);
}
.gki-pattern-top h3{margin:0;}
.gki-pattern p{font-size:16px;margin:0;}
/* ── Inline mid-article CTA ───────────────────────────── */
.gki-cta-inline{
display:flex;align-items:center;gap:22px;flex-wrap:wrap;
background:var(--bg-highlight);
border:1px solid #cfe0fb;
border-radius:14px;
padding:24px 26px;
margin:36px 0;
}
.gki-cta-inline-text{flex:1 1 340px;min-width:0;}
.gki-cta-inline-title{
font-size:18px;font-weight:700;color:var(--text-main);
line-height:1.4;margin:0 0 6px;
}
.gki-cta-inline-sub{font-size:15px;line-height:1.6;color:var(--text-body);margin:0;}
.gki-cta-inline .gki-btn-solid{flex:0 0 auto;}
/* ── Numbered step timeline ───────────────────────────── */
.gki-steps{
list-style:none;counter-reset:gkistep;
margin:26px 0 8px;padding:0;
}
.gki-step{
counter-increment:gkistep;
position:relative;
padding:0 0 26px 60px;
margin:0;
}
.gki-step::before{
content:counter(gkistep);
position:absolute;left:0;top:0;
width:38px;height:38px;
border-radius:50%;
background:var(--accent-light);
border:1.5px solid #c4dbfb;
color:var(--accent-dk);
font-size:14.5px;font-weight:700;
display:flex;align-items:center;justify-content:center;
font-variant-numeric:tabular-nums;
}
.gki-step::after{
content:"";position:absolute;
left:19px;top:44px;bottom:6px;
width:1.5px;
background:linear-gradient(180deg,#cfe0fb,#eef3fa);
}
.gki-step:last-child{padding-bottom:0;}
.gki-step:last-child::after{display:none;}
.gki-step h3{padding-top:7px;}
.gki-step > p{font-size:16px;margin-bottom:0;}
/* ── Takeaway ─────────────────────────────────────────── */
.gki-takeaway{
background:var(--bg-highlight);
border:1px solid #cfe0fb;
border-radius:14px;
padding:24px 26px;
margin:0 0 20px;
}
.gki-takeaway p{
font-size:clamp(16.5px,2.1vw,18px);
line-height:1.7;color:var(--text-main);
font-weight:400;margin:0;
}
/* ── Final conversion block ───────────────────────────── */
.gki-cta-final{
position:relative;
background:linear-gradient(155deg,var(--navy) 0%,var(--navy-2) 55%,#173861 100%);
border-radius:16px;
padding:clamp(28px,4vw,44px);
margin:34px 0 0;
overflow:hidden;
color:#b9c9dc;
}
.gki-cta-final::before{
content:"";position:absolute;top:-90px;right:-70px;
width:280px;height:280px;border-radius:50%;
background:radial-gradient(circle,rgba(26,115,232,.34) 0%,rgba(26,115,232,0) 70%);
pointer-events:none;
}
.gki-cta-eyebrow{
position:relative;display:inline-block;
font-size:11px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;
color:#7fb2ff;border:1px solid rgba(127,178,255,.32);
border-radius:99px;padding:5px 12px;margin-bottom:16px;
}
.gki-cta-final-title{
position:relative;
font-size:clamp(21px,3vw,27px);line-height:1.32;font-weight:700;
color:#fff;letter-spacing:-.015em;margin:0 0 12px;
}
.gki-cta-final-copy{
position:relative;font-size:16px;line-height:1.7;
margin:0 0 20px;max-width:62ch;
}
.gki-cta-points{
position:relative;list-style:none;
display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));
gap:10px 20px;margin:0 0 26px;padding:0;
}
.gki-cta-points li{
position:relative;margin:0;padding-left:26px;
font-size:15px;font-weight:550;color:#dbe7f7;line-height:1.5;
}
.gki-cta-points li::before{
content:"";position:absolute;left:2px;top:7px;
width:11px;height:6px;
border-left:2px solid #5ea2ff;border-bottom:2px solid #5ea2ff;
transform:rotate(-45deg);
}
.gki-cta-actions{position:relative;display:flex;flex-wrap:wrap;gap:12px;}
.gki-cta-tel{position:relative;font-size:14px;margin:18px 0 0;color:#8fa6c0;}
.gki-cta-tel a{color:#9cc4f5 !important;font-weight:700;background-image:none !important;}
.gki-cta-tel a:hover{color:#fff !important;}
/* ══════════════ RESPONSIVE ══════════════ */
@media (min-width:900px){
.gki-patterns{grid-template-columns:1fr 1fr;}
.gki-patterns .gki-pattern:last-child{grid-column:1 / -1;}
}
@media (max-width:680px){
.gki-blog{font-size:16px;line-height:1.72;}
.gki-lede{padding:18px 20px;}
.gki-pattern{padding:20px;}
.gki-pattern-top{align-items:flex-start;}
.gki-cta-inline{padding:20px;gap:16px;}
.gki-cta-inline .gki-btn-solid{width:100%;}
.gki-cta-actions .gki-btn{width:100%;}
.gki-step{padding-left:50px;}
.gki-step::before{width:34px;height:34px;font-size:13.5px;}
.gki-step::after{left:17px;top:40px;}
.gki-jump a{font-size:13.5px;padding:7px 13px;}
}
@media (max-width:400px){
.gki-wins,
.gki-cta-points{grid-template-columns:1fr;}
}
/* Motion / print safety */
@media (prefers-reduced-motion:reduce){
.gki-blog *{transition:none !important;}
.gki-blog .gki-btn:hover,
.gki-pattern:hover,
.gki-jump a:hover{transform:none;}
}
@media print{
.gki-jump,
.gki-cta-inline,
.gki-cta-final{display:none !important;}
.gki-blog{font-size:11pt;}
.gki-pattern,.gki-step{break-inside:avoid;}
}
The Salesforce security audit checklist ensures two things: one, your customer data and business critical information stays protected. Second, it prepares you against any slips in security or compliance risks, fortifying your security posture. Salesforce may secure the infrastructure underneath your org. The responsibility for access rules, configurations, and data visibility rests with your team. Every control that defines who can view or act on data must be reviewed and governed internally.
So, it makes sense to conduct a Salesforce security review before renewal. It’s the one point in the year when you’re closely monitoring the account. Also, Salesforce keeps bringing new updates or features that can introduce changes in your security settings or how it affects data exposure, and it’s hard to notice at first. Therefore, a follow-up Salesforce profile security check can catch any gaps and fill them before any risks or harm occurs to your company’s data. In this blog, we’ll help you prepare a solid Salesforce access review checklist.
Why Conduct a Salesforce Security Review Before Renewal?
Renewal offers a checkpoint to assess not just one but review the security and integrity of your entire infrastructure. Budgets get scrutinized, licenses get recounted, and how securely the data moves and get stored, is also evaluated. Here’s what that review tends to turn up
Fewer opportunities for data to be misused or breached
Unused licenses that have been quietly adding to costs
Well-defined audit trails for any compliance review
Old misconfigurations caught before carrying into another license year
Documented metrics to track future review outcomes
Salesforce Security Audit Checklist: 12 Steps for Renewal Readiness
The 12 checks at a glance
Phase 1 · Identity & Governance
Salesforce Profile Security Review
Conduct a Salesforce Permission Set Audit
Deactivate Dormant Users and Cleanse Licenses
Phase 2 · Data Visibility
Review Organization-Wide Defaults (OWDs)
Inspect Role Hierarchies and Sharing Rules
Audit Field-Level Security (FLS)
Phase 3 · Authentication
Use Multi‑Step Login Security
Review Network Settings and IP Restrictions
Initiate Salesforce’s Native Health Tool
Phase 4 · External Access
Audit Connected Apps and API Access
Inspect Public Sites and Communities
Validate Backup and Recovery Protocols
01
Phase 1: Identity and Governance Management
1: Salesforce Profile Security Review
Many organizations continue to depend on legacy, broad profiles that give excessive privileges beyond the roles may need. Start with reviewing each profile to ensure it provides only the necessary access for the role and remove extra permissions. Where possible, shift role‑specific access decisions from profiles to permission only. It enforces essential‑only permissions, refines ongoing changes, and overall governance.
2: Conduct a Salesforce Permission Set Audit
The review takes time, but it prevents uncontrolled privileges. Without it, organizations often end up with multiple users holding admin rights that have no clear business reason. Document each permission set, confirm the need, and remove anything unnecessary, keeping access accountable and reducing hidden risks.
3: Deactivate Dormant Users and Cleanse Licenses
Login history reports will show which accounts are no longer in use. These accounts represent both security exposure and an unnecessary licensing cost. They should be frozen or deactivated, and the resulting license count should be reconciled against the employees actually working within the system.
02
Phase 2: Data Visibility and Sharing Rules
4: Review Organization-Wide Defaults (OWDs)
Organization-wide defaults ensure record visibility across the org. Get this wrong and every other control you put in place afterward is working against a poor foundation. Set these to the most restrictive level your business can reasonably operate with. ‘Private’ wherever sensitivity demands it, and ‘Public Read/Write’ only where there’s a clear reason for it.
5: Inspect Role Hierarchies and Sharing Rules
Role hierarchies and sharing rules exist specifically to extend access beyond those defaults, which is precisely why periodic review matters. An outdated rule can, over time, give visibility to agents with no legitimate reason to hold it. Each rule should be examined carefully to confirm if the access it provides still matches the current requirements. If not, then the access is no longer justified, remove or revise the rule to restore essential‑only permissions.
6: Audit Field-Level Security (FLS)
Object-level access alone doesn’t help you get complete control. Field-level security governs whether particular fields: Social Security numbers, compensation figures, banking information, remain visible to a given role. independent of broader object permissions. These fields should be restricted to the roles that require them, rather than left visible by default convention.
Halfway through — and this is where most orgs find their first surprise.
Over-permissioned profiles and stale sharing rules are the two findings we hit most often. Have a certified architect pressure-test yours with a Salesforce security review before the renewal paperwork lands.
Get my org reviewed
03
Phase 3: Authentication and Platform Controls
7: Use Multi‑Step Login Security
It’s a basic requirement, though a policy on paper does not guarantee enforcement in practice. Every login should be confirmed to pass through two‑step verification without exception. Any legacy authentication path that might bypass it should be identified and closed to maintain consistent protection across all user accounts.
8: Review Network Settings and IP Restrictions
Define trusted IP ranges for login access and session settings that determine where access to the org is even possible. Logins should be restricted to trusted company networks or an approved VPN. Session timeout settings also needed particular attention, since an unattended device left logged in is a more common point of entry than many organizations assume.
9: Initiate Salesforce’s Native Health Tool
Salesforce provides an integrated Health Check function that scores your org against a recognized baseline and flags the weak points automatically. It’s worth running as a final pass, since it reveals what a manual review may miss. It’s also a quick way to confirm your meeting security best practices across the board.
04
Phase 4: Integrations and External Access
10: Audit Connected Apps and API Access
APIs can stay in the apps or platforms way beyond the purpose they were ingested in the first place. Go through every connected app that has API access to your org and pull OAuth tokens for anything abandoned, deprecated, or no longer serving an actual business need.
11: Inspect Public Sites and Communities
For organizations running Experience Cloud sites, guest user access requires close examination. It should be confirmed that guest profiles cannot reach internal objects or records under any circumstances. It’s an often-overlooked exposure but quite simpler to correct once identified. Remove unnecessary permissions and restrict guest access to only what is explicitly intended for public use.
12: Validate Backup and Recovery Protocols
Confirm that automated backups covering both data and metadata are running and completing successfully, particularly ahead of any major system update. Only tested recovery plans provide assurance of risk control. Therefore, regularly perform restoration checks to verify that backups work as expected and are reliable during an actual incident.
Key Takeaways from Salesforce Security Audit Checklist
The Salesforce security audit checklist helps businesses close the most common security, permissions, and compliance gaps before renewal and add resilience across both data and metadata. However, for a successful Salesforce security review before renewal, embed these checks into a recurring schedule, not a one‑time exercise. Hopefully this blog has given you a Salesforce access review checklist, letting you deliver compliance, transparency, and gain long‑term protection against unexpected exposures.
If the entire process seems complex, you can seek support from a Salesforce Security services provider, as their experts would manage the entire Salesforce profile security check process while you focus on critical business operations.
Salesforce Security Services
Walk into your renewal knowing exactly what your org exposes.
Girikon is a certified Salesforce consulting partner. Our security team runs all 12 checks against your org, scores the findings by risk, and gives you a remediation plan your admins can action — plus the audit trail your compliance reviewer will ask for.
Profile, permission set & license cleanup
OWD, role hierarchy & FLS review
MFA, IP range & Health Check remediation
Connected app, guest user & backup validation
Book a free security review
Explore Salesforce security services
Renewal date approaching? Call +1‑480‑241‑8198 (USA)
/* ══════════════════════════════════════════════════════════
Salesforce Security Audit Checklist — blog styles
Scope: .gks-blog | Zero JS | Safe for WP columns
══════════════════════════════════════════════════════════ */
.gks-blog{
--accent:#1a73e8;
--accent-dk:#0f4fa8;
--accent-light:#e8f0fe;
--navy:#0d1f38;
--navy-2:#122b4d;
--bg-highlight:#f3f7ff;
--line:#e4e9f2;
--white:#ffffff;
--text-main:#101828;
--text-body:#3f4a5a;
--text-muted:#697586;
--teal:#0d8f7a;
--teal-light:#e3f6f2;
width:100%;
box-sizing:border-box;
font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
color:var(--text-body);
line-height:1.75;
font-size:17px;
-webkit-font-smoothing:antialiased;
}
.gks-blog *,
.gks-blog *::before,
.gks-blog *::after{box-sizing:border-box;}
/* ── Typography ───────────────────────────────────────── */
.gks-blog h2{
font-size:clamp(22px,3.2vw,30px);
line-height:1.28;
font-weight:700;
color:var(--text-main);
letter-spacing:-.015em;
margin:46px 0 16px;
scroll-margin-top:100px;
}
.gks-blog h3{
font-size:clamp(18px,2.4vw,22px);
line-height:1.35;
font-weight:700;
color:var(--text-main);
letter-spacing:-.012em;
margin:0;
scroll-margin-top:100px;
}
.gks-blog h4{
font-size:clamp(16.5px,2.1vw,19px);
line-height:1.4;
font-weight:700;
color:var(--text-main);
letter-spacing:-.008em;
margin:0 0 9px;
scroll-margin-top:100px;
}
.gks-blog p{margin:0 0 18px;}
.gks-blog p:last-child{margin-bottom:0;}
.gks-blog strong{font-weight:650;color:var(--text-main);}
.gks-blog img{max-width:100%;height:auto;border-radius:12px;}
/* ── Links ────────────────────────────────────────────── */
.gks-blog a{
color:var(--accent);
font-weight:600;
text-decoration:none;
background-image:linear-gradient(currentColor,currentColor);
background-size:100% 1px;
background-repeat:no-repeat;
background-position:0 100%;
transition:color .18s ease,background-size .18s ease;
}
.gks-blog a:hover,
.gks-blog a:focus-visible{color:var(--accent-dk);background-size:100% 2px;}
.gks-blog a:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:3px;}
/* ── Shared SVG defaults ──────────────────────────────── */
.gks-blog svg{
width:100%;height:100%;display:block;
fill:none;stroke:currentColor;stroke-width:2;
stroke-linecap:round;stroke-linejoin:round;
}
/* ── Lede ─────────────────────────────────────────────── */
.gks-lede{
background:var(--bg-highlight);
border:1px solid var(--line);
border-left:4px solid var(--accent);
border-radius:0 12px 12px 0;
padding:22px 26px;
margin:0 0 24px;
}
.gks-lede p{
font-size:clamp(17px,2.1vw,19px);
line-height:1.7;
color:var(--text-main);
font-weight:400;
}
/* ── Buttons ──────────────────────────────────────────── */
.gks-blog .gks-btn{
display:inline-flex;align-items:center;justify-content:center;gap:8px;
padding:12px 22px;border-radius:8px;
font-size:15px;font-weight:650;line-height:1.2;text-align:center;
background-image:none;border:1.5px solid transparent;
transition:transform .16s ease,box-shadow .16s ease,background-color .16s ease,color .16s ease,border-color .16s ease;
}
.gks-blog .gks-btn:hover{transform:translateY(-1px);background-size:0 0;}
.gks-blog .gks-btn-solid{
background-color:var(--accent);color:#fff !important;
box-shadow:0 4px 14px rgba(26,115,232,.32);width:100%;
}
.gks-blog .gks-btn-solid:hover{background-color:#1668d6;box-shadow:0 7px 20px rgba(26,115,232,.42);}
.gks-blog .gks-btn-light{
background-color:#fff;color:var(--navy) !important;
box-shadow:0 4px 14px rgba(0,0,0,.18);
}
.gks-blog .gks-btn-light:hover{background-color:#eef4ff;}
.gks-blog .gks-btn-ghost{
background-color:transparent;color:#dbe7f7 !important;
border-color:rgba(255,255,255,.32);
}
.gks-blog .gks-btn-ghost:hover{border-color:#fff;color:#fff !important;background-color:rgba(255,255,255,.08);}
/* ── Outcome list ─────────────────────────────────────── */
.gks-outcomes{
list-style:none;margin:22px 0 8px;padding:0;
display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:11px;
}
.gks-outcomes li{
position:relative;margin:0;
padding:14px 16px 14px 46px;
background:var(--white);
border:1px solid var(--line);
border-radius:11px;
font-size:15.5px;line-height:1.5;
color:var(--text-main);
transition:border-color .15s ease,box-shadow .15s ease;
}
.gks-outcomes li::before{
content:"";position:absolute;left:15px;top:19px;
width:13px;height:7px;
border-left:2.4px solid var(--teal);
border-bottom:2.4px solid var(--teal);
transform:rotate(-45deg);
}
.gks-outcomes li:hover{border-color:#b7e3da;box-shadow:0 3px 12px rgba(13,143,122,.10);}
/* ── At a glance ──────────────────────────────────────── */
.gks-glance{
background:var(--white);
border:1px solid var(--line);
border-radius:14px;
padding:22px 24px 18px;
margin:24px 0 34px;
box-shadow:0 1px 2px rgba(16,24,40,.04);
}
.gks-glance-head{
display:flex;align-items:center;gap:9px;
font-size:12px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;
color:var(--text-muted);margin:0 0 18px !important;
}
.gks-glance-head svg{width:17px;height:17px;flex:0 0 17px;color:var(--accent);stroke-width:1.9;}
.gks-glance-grid{
display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));
gap:20px 26px;
}
.gks-glance-phase{
font-size:11.5px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;
color:var(--accent);margin:0 0 9px !important;
padding-bottom:8px;border-bottom:1px solid var(--line);
}
.gks-glance-list{margin:0;padding:0 0 0 22px;}
.gks-glance-list li{
margin:0 0 7px;padding:0;
font-size:14.5px;line-height:1.45;
color:var(--text-muted);
}
.gks-glance-list li::marker{font-weight:700;color:var(--accent);font-size:12.5px;}
.gks-glance-list a{
color:var(--text-body) !important;font-weight:550;
background-image:none !important;
transition:color .15s ease;
}
.gks-glance-list a:hover{color:var(--accent) !important;}
/* ── Phase band ───────────────────────────────────────── */
.gks-phase{
display:flex;align-items:center;gap:15px;
background:linear-gradient(95deg,var(--accent-light) 0%,rgba(232,240,254,.35) 100%);
border-left:4px solid var(--accent);
border-radius:0 11px 11px 0;
padding:15px 20px;
margin:34px 0 20px;
}
.gks-phase-tag{
flex:0 0 auto;
font-size:13px;font-weight:800;
font-variant-numeric:tabular-nums;
letter-spacing:.02em;
color:#fff;background:var(--accent);
border-radius:7px;padding:5px 10px;
box-shadow:0 2px 8px rgba(26,115,232,.28);
}
/* ── Check cards ──────────────────────────────────────── */
.gks-checks{display:grid;gap:14px;margin:0 0 8px;}
.gks-check{
display:flex;gap:16px;align-items:flex-start;
background:var(--white);
border:1px solid var(--line);
border-radius:13px;
padding:20px 22px;
transition:border-color .18s ease,box-shadow .18s ease,transform .18s ease;
}
.gks-check:hover{
border-color:#b9d2f7;
box-shadow:0 8px 24px rgba(16,24,40,.07);
transform:translateY(-1px);
}
.gks-check-box{
flex:0 0 30px;width:30px;height:30px;
margin-top:3px;padding:6px;
border-radius:8px;
background:var(--teal-light);
border:1.5px solid #b7e3da;
color:var(--teal);
}
.gks-check-body{min-width:0;}
.gks-check-body p{font-size:16px;margin:0;}
.gks-num{
color:var(--accent);
font-variant-numeric:tabular-nums;
margin-right:2px;
}
/* ── Inline mid-article CTA ───────────────────────────── */
.gks-cta-inline{
display:flex;align-items:center;gap:22px;flex-wrap:wrap;
background:var(--bg-highlight);
border:1px solid #cfe0fb;
border-radius:14px;
padding:24px 26px;
margin:34px 0;
}
.gks-cta-inline-text{flex:1 1 340px;min-width:0;}
.gks-cta-inline-title{
font-size:18px;font-weight:700;color:var(--text-main);
line-height:1.4;margin:0 0 6px;
}
.gks-cta-inline-sub{font-size:15px;line-height:1.6;color:var(--text-body);margin:0;}
.gks-cta-inline .gks-btn-solid{width:auto;flex:0 0 auto;}
/* ── Takeaway ─────────────────────────────────────────── */
.gks-takeaway{
background:var(--bg-highlight);
border:1px solid #cfe0fb;
border-radius:14px;
padding:24px 26px;
margin:0 0 20px;
}
.gks-takeaway p{
font-size:clamp(16.5px,2.1vw,18px);
line-height:1.7;color:var(--text-main);
font-weight:400;margin:0;
}
/* ── Final conversion block ───────────────────────────── */
.gks-cta-final{
position:relative;
background:linear-gradient(155deg,var(--navy) 0%,var(--navy-2) 55%,#173861 100%);
border-radius:16px;
padding:clamp(28px,4vw,44px);
margin:34px 0 0;
overflow:hidden;
color:#b9c9dc;
}
.gks-cta-final::before{
content:"";position:absolute;top:-90px;right:-70px;
width:280px;height:280px;border-radius:50%;
background:radial-gradient(circle,rgba(26,115,232,.34) 0%,rgba(26,115,232,0) 70%);
pointer-events:none;
}
.gks-cta-eyebrow{
position:relative;display:inline-block;
font-size:11px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;
color:#7fb2ff;border:1px solid rgba(127,178,255,.32);
border-radius:99px;padding:5px 12px;margin-bottom:16px;
}
.gks-cta-final-title{
position:relative;
font-size:clamp(21px,3vw,27px);line-height:1.32;font-weight:700;
color:#fff;letter-spacing:-.015em;margin:0 0 12px;
}
.gks-cta-final-copy{
position:relative;font-size:16px;line-height:1.7;
margin:0 0 20px;max-width:62ch;
}
.gks-cta-points{
position:relative;list-style:none;
display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));
gap:10px 20px;margin:0 0 26px;padding:0;
}
.gks-cta-points li{
position:relative;margin:0;padding-left:26px;
font-size:15px;font-weight:550;color:#dbe7f7;line-height:1.5;
}
.gks-cta-points li::before{
content:"";position:absolute;left:2px;top:7px;
width:11px;height:6px;
border-left:2px solid #5ea2ff;border-bottom:2px solid #5ea2ff;
transform:rotate(-45deg);
}
.gks-cta-actions{position:relative;display:flex;flex-wrap:wrap;gap:12px;}
.gks-cta-tel{position:relative;font-size:14px;margin:18px 0 0;color:#8fa6c0;}
.gks-cta-tel a{color:#9cc4f5 !important;font-weight:700;background-image:none !important;}
.gks-cta-tel a:hover{color:#fff !important;}
/* ══════════════ RESPONSIVE ══════════════ */
@media (max-width:680px){
.gks-blog{font-size:16px;line-height:1.72;}
.gks-lede{padding:18px 20px;}
.gks-glance{padding:20px;}
.gks-glance-grid{gap:18px;}
.gks-phase{padding:13px 16px;gap:12px;margin:28px 0 16px;}
.gks-check{padding:18px;gap:13px;}
.gks-check-box{flex:0 0 26px;width:26px;height:26px;padding:5px;}
.gks-cta-inline{padding:20px;gap:16px;}
.gks-cta-inline .gks-btn-solid{width:100%;}
.gks-cta-actions .gks-btn{width:100%;}
}
@media (max-width:400px){
.gks-outcomes,
.gks-cta-points{grid-template-columns:1fr;}
}
/* Motion / print safety */
@media (prefers-reduced-motion:reduce){
.gks-blog *{transition:none !important;}
.gks-blog .gks-btn:hover,
.gks-check:hover{transform:none;}
}
@media print{
.gks-cta-inline,
.gks-cta-final{display:none !important;}
.gks-blog{font-size:11pt;}
.gks-check{break-inside:avoid;}
}
Enterprise AI has moved from being in the experiment stage to production at scale. Inside most Salesforce orgs, it’s already running support queues, scoring leads, and shaping decisions that impact revenue directly. But many businesses weren’t ready for it, which is why the ROI formula they’ve used for decades is starting to prove insufficient to decode what AI actually does.
Earlier return on investment models followed the simple logic: spend the money, get the return, close the file. AI value builds gradually through efficiency, expanded capacity, and stronger data foundations. That’s why ROAI is becoming the most accurate measure for Salesforce teams.
But businesses must understand what ROAI is to fully replace traditional return on investment in Salesforce projects. In this blog, we’ll explore 5 Salesforce Agentforce impact tracking metrics that show how to track impact more effectively. We’ll also talk about how to build a strategy to help you transit from traditional AI investment metrics enterprise to return on AI investment Salesforce.
Why Enterprises are Rethinking AI Investment Impact in Salesforce
Businesses assume stability once they have invested in the AI project. But it doesn’t work well with AI because it keeps evolving. When teams apply legacy formulas, they face issues like:
⚠
Fixed-input thinking breaks down fast — AI systems keep improving without any extra spending behind them.
⚠
Watching single transactions in isolation misses how one gain tends to spread quietly into other workflows.
⚠
Capacity gains from handling more work without new headcount are rarely included in ROI.
⚠
Data quality improvements from AI rollouts don’t appear in financial reporting, even though they create measurable returns.
What is ROAI?
ROAI offers a wider lens for evaluating what Salesforce AI projects actually produce. It calculates token consumption and model usage costs alongside efficiency, scalability, and data quality improvements. Thus, providing a more precise view than traditional ROI for Agentforce and enterprise AI investments.
ROAI Formula
ROAI = Economic Return / (Cost of Human Intelligence + Cost of Tokens)
ROAI vs ROI AI Projects: What is the Difference?
If traditional ROI focuses on knowing whether a project paid for itself, then ROAI asks something more useful — what can the business do now that it couldn’t manage before? That question only gets more important as agentic tools take on a bigger role. Salesforce Agentforce ROI metrics, for instance, need to reflect the independent judgment calls an agent makes on its own, not just how many tickets got closed by end of day.
Factor
Traditional ROI
ROAI
Core Metric Basis
Net financial gain versus investment cost
Business value from AI adoption across efficiency, revenue, and data quality
Formula Basis
ROI = (Gain – Cost) / Cost
No fixed formula — mixes cost savings, productivity, new revenue, and risk reduction
Focus Area
Purely financial outcomes: profits, margins, payback
Broader enterprise outcomes: automation, decision speed, customer experience
Time Horizon
Short-to-medium term, tied to a project’s lifecycle
Medium-to-long term, tracking AI maturity and scaling impact
How it Measures
Straightforward, drawn from accounting data
More complex, requiring tracking of intangible benefits like agility and competitive edge
Common Salesforce Agentforce ROI Metrics
Case Resolution Speed
Track the reduction in average time taken to close customer cases.
Agent Productivity
Calculates the boost in cases handled per agent without adding staff.
Customer Satisfaction
Focuses on any improvement in CSAT or NPS scores tied to faster resolutions.
Cost Efficiency
Measures savings from reduced escalations and lower support expenses.
Scalability
Assesses the ability to manage higher case volumes during peak demand without disruption.
5 Steps to Begin Transitioning to an ROAI Framework
Step 01
Audit What You’re Already Tracking
Review every metric tied to current technology projects and separate those that only measure speed or efficiency. This exposes gaps in reporting and sets the stage for a broader framework that captures value beyond operational quick wins.
Step 02
Map Capability Gains Directly
Document where teams manage greater demands or more complex tasks without adding staff. These gains often go unnoticed, but they show expanded organizational capacity. Capturing them provides a clearer view of how investments reshape what the business can realistically handle.
Step 03
Score Your Data Health Gains
Check and improve the quality of data, including the introduction of a more restrictive approach to data quality improvement — through better records and fields and proper use of data and information governance. By applying these changes you can enhance reporting accuracy, ensure compliance, and boost system performance. Unlike tool-specific benefits, these upgrades remain valuable long after individual solutions are replaced.
Step 04
Build a Three-Tier Dashboard
You need a reporting dashboard that integrates velocity, scalability, and data foundation metrics into one structured view. With this layered approach, you can see the value of the project across different systems. Leadership gets a clearer insight into a system’s performance and can spot the gaps, if any.
Step 05
Review Performance Quarterly
Annual checkpoints miss rapid shifts in technology. Conduct structured evaluation every three months to identify compounding benefits and detect early warning signs. This method lets you make timely iterations before escalation and stay updated to ever-evolving advancement in artificial technology and its subsets.
Key Considerations Before Measuring ROAI
01
Scaling Benefits Take Time
Not every AI initiative shows scaling benefits right away, and that’s expected. Some projects exist mainly to build the data foundation that other tools will depend on later.
02
Leadership Commitment Required
Capability gains surface slower than efficiency wins. Therefore, leadership must sustain commitment, as early metrics may underreport long-term enterprise transformation.
03
Cross-Team Impact Counts
Don’t ignore cross-departmental inputs. Data architecture improvements frequently benefit teams outside the one that requested the AI tool — narrow reporting may understate the real impact.
04
Baseline Data Essential
Solid baseline data matters most of all. Without accurate pre-AI benchmarks, proving full enterprise impact becomes difficult to highlight later.
Wrapping It Up: What is ROAI
The real question behind ROAI vs ROI isn’t which formula is more precise — it’s which one to focus on initially. Because ROI tells you whether a project broke even, and ROAI tells you what the organization can now do, and how much sturdier its foundation has become.
So, to capture return on AI investment Salesforce fully, organizations need expert guidance. Partner with a Salesforce AI consulting provider — the certified Salesforce experts will help you accelerate adoption, strengthen data foundations, and enable you to realize enterprise-wide transformation.
ROI tells you whether a project broke even. ROAI tells you what the organization can now do — and how much sturdier its foundation has become. That’s the metric shift enterprise AI demands.
:root {
--accent: #1a73e8;
--accent-light: #f3f7ff;
--text: #2a2a2a;
--heading: #1a1a1a;
--border: #e5e7eb;
--card: #f8fafc;
--amber: #d97706;
--amber-light: #fffbeb;
}
/* BASE */
.blog-body {
font-size: 17px;
line-height: 1.78;
color: var(--text);
}
.blog-body p {
margin-bottom: 20px;
}
.blog-body h2 {
font-size: 28px;
line-height: 1.35;
margin: 48px 0 16px;
color: var(--heading);
}
.blog-body h3 {
font-size: 20px;
line-height: 1.4;
margin-bottom: 10px;
color: var(--heading);
}
.blog-body hr {
border: none;
border-top: 1px solid var(--border);
margin: 48px 0;
}
/* ISSUE GRID */
.issue-grid {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 14px;
margin: 24px 0 8px;
}
.issue-card {
display: flex;
gap: 12px;
align-items: flex-start;
background: var(--amber-light);
border: 1px solid #fde68a;
border-radius: 10px;
padding: 16px 18px;
}
.issue-icon {
font-size: 18px;
color: var(--amber);
flex-shrink: 0;
margin-top: 2px;
}
.issue-card p {
margin: 0;
font-size: 15px;
line-height: 1.65;
}
/* FORMULA */
.formula-block {
background: var(--heading);
color: #fff;
border-radius: 10px;
padding: 24px 28px;
margin: 28px 0;
text-align: center;
}
.formula-label {
font-size: 11px;
font-weight: 700;
text-transform: uppercase;
letter-spacing: .1em;
color: #9ca3af;
margin-bottom: 10px;
}
.formula-text {
font-size: 20px;
font-weight: 700;
color: #fff;
line-height: 1.4;
font-family: 'Courier New', Courier, monospace;
}
/* TABLE */
.tbl-wrap {
overflow-x: auto;
margin: 24px 0 32px;
border: 1px solid var(--border);
border-radius: 8px;
}
.af-blog-table {
width: 100%;
border-collapse: collapse;
min-width: 540px;
}
.af-blog-table thead th {
background: var(--accent-light);
color: var(--accent);
padding: 14px 16px;
text-align: left;
font-size: 12px;
text-transform: uppercase;
letter-spacing: .05em;
}
.af-blog-table tbody td {
padding: 14px 16px;
border-top: 1px solid var(--border);
line-height: 1.65;
vertical-align: top;
font-size: 15px;
}
.af-blog-table tbody td:first-child {
font-weight: 700;
color: var(--heading);
white-space: nowrap;
font-size: 14px;
}
/* METRICS GRID */
.metrics-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 14px;
margin: 24px 0 8px;
}
.metric-card {
background: var(--card);
border: 1px solid var(--border);
border-radius: 10px;
padding: 18px 18px 14px;
}
.metric-head {
font-size: 14px;
font-weight: 700;
color: var(--accent);
text-transform: uppercase;
letter-spacing: .04em;
margin-bottom: 10px;
}
.metric-card p {
margin: 0;
font-size: 15px;
line-height: 1.65;
}
/* PARTNER CARDS */
.partner-card {
border: 1px solid var(--border);
border-radius: 10px;
overflow: hidden;
margin: 20px 0 24px;
}
.partner-head {
display: flex;
align-items: center;
gap: 14px;
background: var(--accent-light);
padding: 14px 20px;
}
.partner-head h3 {
margin: 0;
flex: 1;
}
.partner-num {
background: var(--accent);
color: #fff;
padding: 4px 12px;
border-radius: 6px;
font-size: 12px;
font-weight: 700;
flex-shrink: 0;
white-space: nowrap;
}
.partner-body {
padding: 20px 22px 8px;
}
.partner-body p:last-child {
margin-bottom: 12px;
}
/* TIPS GRID */
.tips-grid {
display: grid;
gap: 16px;
margin-top: 24px;
}
.tip-card {
display: flex;
gap: 18px;
background: var(--card);
border: 1px solid var(--border);
border-radius: 10px;
padding: 20px;
}
.tip-num {
min-width: 42px;
height: 42px;
background: var(--accent);
color: #fff;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-weight: 700;
font-size: 14px;
flex-shrink: 0;
}
.tip-body h3 {
margin-top: 2px;
}
.tip-body p {
margin-bottom: 0;
}
/* PULL QUOTE */
.pull {
background: var(--accent-light);
border-left: 4px solid var(--accent);
padding: 20px 24px;
border-radius: 6px;
line-height: 1.8;
font-size: 17px;
margin: 28px 0;
}
/* MOBILE */
@media (max-width: 768px) {
.blog-body h2 {
font-size: 24px;
}
.blog-body h3 {
font-size: 18px;
}
.issue-grid {
grid-template-columns: 1fr;
}
.metrics-grid {
grid-template-columns: repeat(2, 1fr);
}
.partner-head {
flex-direction: column;
align-items: flex-start;
}
.tip-card {
flex-direction: column;
align-items: flex-start;
}
.formula-text {
font-size: 16px;
}
}
@media (max-width: 480px) {
.metrics-grid {
grid-template-columns: 1fr;
}
}
Insurance service providers struggle to offer a frictionless claims process. Manual handoffs, fragmented workflows, and decisions that differ all the time, increase the cost, delay the process, and leave insurers unsatisfied. Salesforce OmniStudio insurance claims automation addresses them. The platform can consolidate intake, adjudication, and resolution into a single, guided digital framework. For insurance companies intending to use Salesforce for insurance companies in the USA, this platform shift means reducing processing times, lowering error rates, and enhancing customer experience.
To effectively use Salesforce OmniStudio guided flows, insurance providers must know the intricate details involved, how to implement the platform, and what is the future outlook. This blog will discuss OmniStudio use cases in insurance, how it works, and share a detailed guide for successful application.
What is Salesforce OmniStudio: The Digital Claims Framework
OmniStudio is Salesforce’s low-code development suite designed for industries that require complex, guided user experiences, insurance being a primary use case. It operates within Salesforce Insurance Cloud and delivers claims functionality through three core components: OmniScripts, Integration Procedures, and FlexCards.
OmniScripts
Guide claimants and agents through structured, step-by-step data collection with real-time validation.
Integration Procedures
Pull policy, billing, and claimant data from connected platforms automatically without adjuster intervention.
FlexCards
Display settlement options in clean, role-appropriate views for adjusters with automated claimant notifications.
How Does Salesforce OmniStudio Work?
1
Claims Intake
OmniScripts guide claimants and agents through structured data collection. Required fields are validated in real time, and eligibility checks run automatically against policy records. Errors that typically surface days later during manual review are caught at the point of entry.
2
Claims Adjudication
Workflows in Salesforce OmniStudio apply the same underwriting rules and compliance requirements to every claim. This removes adjuster‑level discretion that can create compliance risk, ensuring claims are processed with consistent standards and discipline, removing discretionary variation that creates compliance exposure.
3
Claims Resolution
FlexCards display settlement options in a clean, role-appropriate view for adjusters. Automated notifications update claimants on status changes, reducing inbound call volume and improving transparency throughout the resolution cycle.
7 Ways Salesforce OmniStudio Insurance Claims Automation is Enhancing Process Efficiency
01
Accelerating First Notice of Loss (FNOL)
The First Notice of Loss is where a policyholder files a claim. Usually, it’s done through inbound calls or filling details through the app. Using OmniScripts replaces these unstructured intake calls with guided digital forms that capture all required claim details upfront. Mandatory fields’ validation and real-time eligibility checks eliminate incomplete submissions, cutting the time between incident reporting and adjudication initiation substantially. It also reduces the burden of admin tasks for your agents as it automates the data pre-filling process.
02
Eliminating Manual Data Entry Across Systems
Integration Procedures pull policy, billing, and claimant data from connected platforms automatically without adjuster intervention. This removes a primary source of keying errors and frees the claims team to focus on decision-making rather than administrative data retrieval across disconnected systems. You must ensure that the data is well protected when it’s part of the claims process and prevent any data privacy breach.
03
Enforcing Consistent Adjudication Standards
Guided decision trees within Salesforce OmniStudio guided flows apply the same underwriting rules and compliance thresholds to every claim, regardless of which adjuster handles it. Your team doesn’t need to supervise them as discretionary variation; a frequent source of regulatory exposure is eliminated at the process level rather than managed case by case. With this uniformity, you lower compliance risk and build confidence with regulators and customers, since every claim is processed against the same transparent standards.
04
Enabling Real-Time Policy Data Access
Salesforce Insurance Cloud claims integration surfaces live policy data at the point of adjudication. Adjusters no longer wait for back-office lookups or work from potentially outdated records. With current, verified information available instantly, they can make accurate decisions faster, reduce cycle times, and strengthen compliance. This immediate visibility also improves customer trust, as claim outcomes are based on transparent, up‑to‑date information.
05
Automating Claimant Communication
Claimholders are automatically notified during claims process life cycle with the help of FlexCards. On the other hand, events like status-update, document-request, and settlement confirmation are generated without manual outreach. This reduces the need for inbound service calls; frees adjusters to focus on complex cases instead of routine communication. When customers get timely interaction and resolution to their usual queries, it enhances CSAT score.
06
Supporting Fraud Detection Via Structured Data Capture
Because OmniScripts enforce consistent, structured data collection at intake, when you run anomaly detection models, they get cleaner inputs to work with. Other Salesforce OmniStudio use cases in insurance include early fraud flagging. Claims automation allows your staff to monitor claims processing history, thus identifying unusual claim activity or fraud. Such knowledge allows insurers to respond promptly, increase their control over claims, and improve the claims process.
07
Improving Audit Readiness and Transparency
OmniStudio documents each claim step in a structured format, providing a step-by-step history of the claim from intake through resolution. The insurers get better insight into the possible vulnerability of each claim, allowing them to fill the gaps at an early stage, for better oversight. It’s also responsible for faster auditing, elimination of record gaps, and offer regulators a transparent, well-documented process.
Tips to Utilize Salesforce OmniStudio for Seamless Claims Automation
1
Align guided flows with existing claims processes
Before configuring OmniScripts, map current claims workflows in detail. Guided flows should reflect how adjusters and your support team actually work, not impose an unfamiliar structure that requires retraining from scratch.
2
Integrate data across policy and claims systems
OmniStudio’s value depends on data connectivity. Use Integration Procedures to establish reliable, real-time links between policy administration, billing, and claims systems. Incomplete integrations limit adjudication accuracy.
3
Technology cannot drive adoption; your team must be prepared to use it effectively
Conduct workshop and training on Salesforce OmniStudio guided flows. This ensures they understand the logic behind each step and handle exceptions without needing manual processes.
4
Build flows that can grow with different product lines
Using configurable parameters in OmniScripts instead of fixed logic. This way, one flow can handle auto, property, and liability claims without needing separate builds.
Salesforce OmniStudio Guided Flows: What’s the Future Outlook?
The next step in Salesforce insurance claims automation consists of the blending of guided workflows with embedded AI. This is because Agentforce voice financial services insurance capabilities are expanding, enabling real-time voice-driven claim intake and intelligent triage without human intervention at every step. Also, predictive models integrated within OmniStudio flows will flag potentially fraudulent claims earlier in the process. We can also expect the active role of AI-assisted adjudication to recommend decisions for complex cases, with human reviews reserved for high-value exceptions.
Therefore, the next step for the insurers who haven’t yet made Salesforce OmniStudio part of their claim workflow must start today! As AI capabilities evolve within the Salesforce ecosystem, insurers that have built guided flow infrastructure will utilize these capabilities without rebuilding their operational architecture.
Partner with a Salesforce AI specialist to design scalable claims automation workflows that cut cycle times and reduce compliance risk.
:root {
--accent: #1a73e8;
--accent-light: #e8f0fe;
--text-main: #1f1f1f;
--text-body: #2a2a2a;
--text-muted: #6b7280;
--rule: #e5e7eb;
--tbl-border: #dde3ec;
--bg-highlight: #f3f7ff;
--bg-light: #f8f9fa;
--white: #ffffff;
}
/* ── Body ── */
.blog-body {
font-size: 17px;
line-height: 1.78;
color: var(--text-body);
width: 100%;
}
.blog-body p {
margin: 0 0 20px 0;
}
.blog-body h2 {
font-size: 24px;
font-weight: 700;
color: var(--text-main);
margin: 48px 0 14px;
line-height: 1.3;
}
.blog-body strong {
font-weight: 700;
color: var(--text-main);
}
.blog-body ul,
.blog-body ol {
margin: 0 0 20px 0;
padding-left: 22px;
}
.blog-body ul li,
.blog-body ol li {
margin-bottom: 8px;
line-height: 1.72;
}
/* ── Pillar Grid (3 components) ── */
.pillar-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 16px;
margin: 8px 0 36px;
}
@media (max-width: 600px) {
.pillar-grid { grid-template-columns: 1fr; }
}
.pillar-card {
background: var(--white);
border: 1px solid var(--tbl-border);
border-top: 3px solid var(--accent);
border-radius: 0 0 8px 8px;
padding: 22px 18px 20px;
text-align: center;
}
.pillar-icon {
width: 52px;
height: 52px;
display: flex;
align-items: center;
justify-content: center;
background: var(--accent-light);
border-radius: 10px;
margin: 0 auto 14px;
}
.pillar-icon svg {
display: block;
}
.pillar-label {
font-size: 14px;
font-weight: 700;
color: var(--text-main);
text-transform: uppercase;
letter-spacing: 0.05em;
margin-bottom: 8px;
}
.pillar-card p {
margin: 0 !important;
font-size: 14.5px;
line-height: 1.65;
color: var(--text-muted);
}
/* ── Workflow Timeline ── */
.workflow-list {
margin: 8px 0 36px;
display: flex;
flex-direction: column;
gap: 0;
}
.workflow-item {
display: flex;
gap: 20px;
align-items: flex-start;
}
.workflow-marker {
display: flex;
flex-direction: column;
align-items: center;
flex-shrink: 0;
padding-top: 2px;
}
.workflow-num {
width: 34px;
height: 34px;
border-radius: 50%;
background: var(--accent);
color: var(--white);
font-size: 14px;
font-weight: 800;
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
}
.workflow-line {
width: 2px;
flex: 1;
min-height: 24px;
background: var(--tbl-border);
margin: 6px 0;
}
.workflow-line-hidden {
width: 2px;
min-height: 0;
}
.workflow-content {
padding-bottom: 24px;
flex: 1;
}
.workflow-title {
font-size: 16.5px;
font-weight: 700;
color: var(--text-main);
margin-bottom: 8px;
padding-top: 5px;
}
.workflow-content p {
margin: 0 !important;
font-size: 16px;
line-height: 1.75;
color: var(--text-body);
}
/* ── Benefits Panel ── */
.benefit-list {
margin: 8px 0 36px;
border: 1px solid var(--tbl-border);
border-radius: 10px;
overflow: hidden;
}
.benefit-item {
padding: 22px 24px;
background: var(--white);
border-bottom: 1px solid var(--tbl-border);
}
.benefit-item:last-child {
border-bottom: none;
}
.benefit-item:nth-child(even) {
background: var(--bg-highlight);
}
.benefit-header {
display: flex;
align-items: center;
gap: 12px;
margin-bottom: 10px;
}
.benefit-num {
font-size: 11px;
font-weight: 800;
letter-spacing: 0.06em;
color: var(--white);
background: var(--accent);
border-radius: 4px;
padding: 3px 8px;
flex-shrink: 0;
}
.benefit-title {
font-size: 16.5px;
font-weight: 700;
color: var(--text-main);
}
.benefit-item p {
margin: 0 !important;
font-size: 16px;
line-height: 1.75;
color: var(--text-body);
}
/* ── Tip Cards ── */
.tip-card {
border: 1px solid var(--tbl-border);
border-left: 4px solid var(--accent);
border-radius: 0 8px 8px 0;
padding: 20px 24px;
margin: 0 0 16px;
background: var(--white);
}
.tip-header {
display: flex;
align-items: center;
gap: 12px;
margin-bottom: 10px;
}
.tip-num {
width: 28px;
height: 28px;
border-radius: 50%;
background: var(--accent);
color: var(--white);
font-size: 13px;
font-weight: 800;
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
}
.tip-title {
font-size: 16.5px;
font-weight: 700;
color: var(--text-main);
line-height: 1.3;
}
.tip-card p {
margin: 0 !important;
font-size: 16px;
line-height: 1.75;
color: var(--text-body);
}
/* ── CTA Box ── */
.cta-box {
background: var(--bg-highlight);
border: 1px solid var(--tbl-border);
border-left: 4px solid var(--accent);
border-radius: 0 8px 8px 0;
padding: 22px 24px;
margin: 28px 0 8px;
}
.cta-text {
margin: 0 !important;
font-size: 16.5px;
line-height: 1.75;
color: var(--text-main);
font-weight: 500;
}