Guest Post
Project Management
Guide
Integrations
ServiceNow
Salesforce

How to Integrate ServiceNow and Salesforce Using Getint: ServiceNow Consultant Guide

Feras Qatanani
Feras Qatanani
November 2, 2026
•
17 min

Why integrate Salesforce and ServiceNow?

Salesforce and ServiceNow often run side by side in the same company. Salesforce holds the customer side: accounts, contacts, opportunities and cases. ServiceNow runs the work behind it: incidents, requests, changes and the workflows and SLAs around them. Sooner or later, information has to move between the two.

That can be a customer issue that IT or operations has to fix, an escalation that needs an engineer, account data that both sides rely on, or a change that a key customer needs to hear about. Without an integration, people copy details by hand, updates get lost, and each team sees only half the story.

I work with ServiceNow every day as a presales consultant, mostly on ITSM and ITOM. A question I hear often is how ServiceNow can work with the tools other teams already use, and Salesforce comes up more than most. Both platforms are great at their jobs, and each team is comfortable in its own. Nobody wants to switch tools, so moving everyone to one platform isn't the answer. The real problem is the gap between them.

A seamless ServiceNow Salesforce integration closes that gap. Done well, it gives you three things:

  • A record created on one side can create or update a record on the other, with the full context already captured.
  • Updates flow in both directions, so statuses, priorities and comments stay in sync.
  • Each team keeps working in its own tool, with no extra logins and no copy and paste.

This guide is for ServiceNow and Salesforce admins, ITSM specialists, and teams responsible for connecting customer-facing operations with IT workflows.

I'll show you how I set up a bidirectional sync using Getint, a no-code integration platform. To keep it concrete, I used one common example: a customer reports that the office printer keeps jamming, the case is logged in Salesforce, and the people who can fix it work in ServiceNow. So I mapped Salesforce cases to ServiceNow incidents and tested everything on free developer instances of both platforms. The same approach works for other records and use cases. I'll also share what surprised me along the way. Some of those surprises had nothing to do with the tool and everything to do with how ServiceNow works, which is exactly the kind of thing you only learn by doing it.

Here's the setup I ended up with, at a glance:

How the sync works: a Salesforce case and a ServiceNow incident linked by Getint, with subject, priority, status and comments kept in step
How the sync works: a Salesforce case and a ServiceNow incident linked by Getint, with subject, priority, status and comments kept in step

Why use Getint for a ServiceNow Salesforce integration

Creating a record in another system is the easy part. Keeping records in step in both directions, comments included, is the hard part. That's the job Getint does, and here's what stood out in my test.

Why use Getint: two-way sync, internal comments stay internal, no code, every sync logged, near real time, and it works with your current license
Why use Getint: two-way sync, internal comments stay internal, no code, every sync logged, near real time, and it works with your current license
  • Two-way sync, built in. Fields, statuses and comments stay in step in both directions. You configure it; you don't build it.
  • You control what customers see. You decide, per direction, which comments the customer can see and which stay internal.
  • No code, owned by admins. Mappings live in one screen. When requirements change, an admin edits a mapping, with no development work.
  • A log you can actually read. Every sync shows its direction, duration and result, so you can trace any change.
  • Near real time. Getint checks for changes every 180 seconds by default, and every update in my test ran in under five seconds.
  • Works with your current ServiceNow license. Getint uses ServiceNow's standard REST API, so this setup needs no Integration Hub subscription.

And because the same platform connects ServiceNow with tools like Jira, Azure DevOps and Zendesk, your next integration doesn't start from scratch.

Before you start: what you need on each side

You need three things: a ServiceNow instance, a Salesforce org with API access, and a Getint workspace. For testing, the free versions are enough. I used a ServiceNow Personal Developer Instance and a Salesforce Developer Edition org.

A quick note on Salesforce editions: according to Getint's Salesforce guide, API access is on by default in Enterprise, Unlimited, Performance and Developer editions. In Group, Essentials and Professional it's off by default, so check that first.

ServiceNow: a dedicated integration user

Getint logs in to ServiceNow as a user, so create one just for the integration instead of reusing your own admin account. A dedicated user keeps the audit trail clean and lets you control exactly which permissions Getint has.

  1. Create a user, for example getint.integration, and set a password.
  2. Untick Password needs reset. Getint's documentation warns that otherwise the connection fails with a misleading permissions error.
  3. Create a custom role, for example getint.
  4. Elevate to security_admin and create six read ACLs that require that role:
Table Field
Dictionary Entry [sys_dictionary] * and None
Field class [sys_glide_object] * and None
Choice [sys_choice] *
Journal Entry [sys_journal_field] None

‍

  1. Give the user the itil role and your custom role.

Why these tables? Getint needs to read ServiceNow's field definitions, field types, choice lists and journal entries (comments and work notes) to build the mappings. The ACLs are read only, so the integration user can look at that metadata but never change it. That's least privilege in practice, and your security team will thank you for it.

If you later see "401 User is not authenticated" even though the password is right, don't panic. I explain that one in the lessons section, because it cost me some time.

Salesforce: an External Client App

On the Salesforce side, Getint doesn't use a username and password. It uses a client ID and client secret from an External Client App, the newer generation of what many admins know as a connected app.

  1. Go to Setup, open External Client App Manager and create a new app.
  2. Turn on OAuth and add a callback URL. Salesforce requires one, but this flow never uses it, so any valid https URL works. I used https://login.salesforce.com/services/oauth2/callback, a common placeholder.
  3. Add the OAuth scope Manage user data via APIs (api).
  4. Enable Client Credentials Flow, and turn off the other security options.
  5. Under the app's OAuth policies, set the Run As user. Every change Getint makes in Salesforce will appear under this user.
  6. Copy the Consumer Key (your client ID) and the Consumer Secret (your client secret).

With the client credentials flow, Getint exchanges the client ID and secret for an OAuth token, so no user password is stored anywhere. Give a new app a few minutes before you test the connection.

Getint: a workspace

Sign up at app.getint.io, create a workspace and choose the apps you want to connect. That's all for prerequisites.

Security at a glance

  • ServiceNow access: a dedicated integration user with itil, your custom role and read-only ACLs. No admin rights.
  • Salesforce access: OAuth client credentials, so no user password is stored.
  • API logins: only the integration user needs snc_basic_auth_api_access. Use OAuth in production where you can.
  • Comment visibility: you decide, per direction, which comments the customer can see.
  • Audit trail: every sync is logged with its direction, time and result, and synced comments keep their original author and time.

Step by step: setting up the Salesforce ServiceNow integration in Getint

Once the prerequisites are in place, the Getint part is quick. Here's the setup in the order I did it.

Step 1: Create the integration

In your workspace, open Workflows (the lightning bolt icon), click Create Integration and choose Continuous Sync. Continuous sync keeps records aligned for as long as the integration runs. The other option, Data Migration, is a one-time move of existing records, which is useful when a company switches tools.

Give the integration a clear name, like "Salesforce ↔ ServiceNow". It sounds minor, but once you have several integrations, you'll thank yourself.

Step 2: Connect Salesforce

Click Connect App, choose Salesforce and create a new connection. Enter your org URL (the my.salesforce.com address), then the client ID and client secret.

Getint also gives you an optional SOQL filter here. Leave it empty to sync everything, or use it to limit the sync, for example to escalated cases only. In a real project, I'd start with a filter, so the first go-live touches a small, predictable set of records.

Step 3: Connect ServiceNow

Do the same for ServiceNow: your instance URL, then the integration user's username and password. I used basic authentication for this test.

Connections are saved in your workspace, so you can reuse them in other integrations without entering the credentials again.

Salesforce and ServiceNow connected in Getint
Salesforce and ServiceNow connected in Getint

Step 4: Map Salesforce cases to ServiceNow incidents

Click Start With Mapping Types and pair the record types. I mapped the Salesforce Case object to the ServiceNow Incident table, because both mean "a customer has a problem". Getint's guide shows other pairs as well, such as Salesforce accounts with ServiceNow tasks.

Choosing Case and Incident as the type mapping
Choosing Case and Incident as the type mapping

After you click Add, the mapping appears between the two apps. See the small 5 FIELDS badge on the link? Getint had already suggested five field pairs, which brings us to the most important step.

The Case to Incident mapping in the Getint editor, with the 5 FIELDS badge showing the suggested field pairs
The Case to Incident mapping in the Getint editor, with the 5 FIELDS badge showing the suggested field pairs

Step 5: Map the fields

Open the mapping with the pencil icon. Getint matched five fields automatically. I kept two, changed one and removed two:

Salesforce Case ServiceNow Incident Sync direction
Subject Short description Both ways
Description Description Both ways
Priority Urgency Both ways

‍

I removed the automatic Company and Closed pairs. They matched by name, but not by meaning. More on that, and on why Priority goes to Urgency, in the lessons section.

The final field mapping, with Salesforce Priority sent to ServiceNow Urgency
The final field mapping, with Salesforce Priority sent to ServiceNow Urgency

For choice fields like Priority, click the gear icon and map each option:

Salesforce Priority ServiceNow Urgency
High 1 - High
Medium 2 - Medium
Low 3 - Low

‍

Mapping Salesforce priority values to ServiceNow urgency
Mapping Salesforce priority values to ServiceNow urgency

One more check: make sure On Create and On Update are ticked on both sides of every row. On my first try, the Urgency side wasn't ticked, and my priority update never reached ServiceNow.

Step 6: Map the statuses

On the Status tab, choose the field that represents status on each side (Status in Salesforce, State in ServiceNow) and map the values:

Salesforce Status ServiceNow State
New New
Working In Progress
Escalated On Hold
Closed Closed

‍

Status mapping between Salesforce and ServiceNow
Status mapping between Salesforce and ServiceNow

One ITIL detail to think about: in ServiceNow, incidents are usually Resolved first and closed later. "Resolved" isn't in this mapping, so decide what Salesforce should show at that stage before you go live.

Step 7: Set up comment sync

On the Comments & Attachments tab, enable comment sync in both directions. Then scroll to Customize comments creation. This is where you decide whether a comment lands as public or private on the other side. My final setup:

When this is created... ...Getint creates
Public Salesforce comment Private work note in ServiceNow
Private Salesforce comment Private work note in ServiceNow
Public ServiceNow comment Public comment in Salesforce
Private ServiceNow work note Private comment in Salesforce

‍

Public Salesforce comments set to arrive in ServiceNow as private work notes
Public Salesforce comments set to arrive in ServiceNow as private work notes

The first row matters most. I explain why in the lessons section.

Step 8: Save and let it run

Click Create (or Save when you edit it later) and check that the integration shows as Enabled. By default, Getint checks both systems for changes every 180 seconds, and you can change the interval in the settings.

Testing the sync end to end

I ran five tests on one record: a Salesforce case called "Test 1: Printer not working". Here's the whole run at a glance, straight from Getint's log, followed by each test in detail.

Timeline of the test: five real syncs between Salesforce case 00001027 and ServiceNow incident INC0010001, with the time each took
Timeline of the test: five real syncs between Salesforce case 00001027 and ServiceNow incident INC0010001, with the time each took

Test 1: A new Salesforce case creates a ServiceNow incident

I created case 00001027 with priority High. Within a few minutes, ServiceNow had a new incident, INC0010001, opened by the Getint integration user, with the subject and description copied over.

The new case in Salesforce
The new case in Salesforce
The incident Getint created in ServiceNow, shown after the later tests
The incident Getint created in ServiceNow, shown after the later tests

Test 2: Priority changes reach ServiceNow

After switching the mapping to Urgency, I changed the priority on the case. With the case set to High, the incident's Urgency changed to 1 - High, and ServiceNow recalculated the Priority on its own to 3 - Moderate, because Impact was still 3 - Low. The activity log shows it clearly: "Priority 3 - Moderate was 4 - Low".

The case priority set to High in Salesforce
The case priority set to High in Salesforce
Urgency synced from Salesforce, Priority recalculated by ServiceNow, and the change in the activity log
Urgency synced from Salesforce, Priority recalculated by ServiceNow, and the change in the activity log

Test 3: A ServiceNow work note reaches Salesforce

I added a work note on the incident: "Support update: Checked the printer remotely. The paper jam sensor is faulty. A technician is scheduled for tomorrow at 10:00." It appeared in the Salesforce case feed as an internal post. Getint added the original author and time in a short footer, which is handy for traceability.

Adding a work note in ServiceNow
Adding a work note in ServiceNow
The work note as an internal Salesforce post, with the original author and time added by Getint
The work note as an internal Salesforce post, with the original author and time added by Getint

Test 4: A Salesforce post reaches ServiceNow

From the case, I posted: "Customer confirmed the visit. Please call them 15 minutes before arrival." It arrived on the incident as a private work note, which is exactly where a support engineer would look for it.

A new post on the Salesforce case
A new post on the Salesforce case
The same post as a work note in ServiceNow
The same post as a work note in ServiceNow

Test 5: Status changes flow back to Salesforce

On the incident, I changed the State to In Progress. A few minutes later, the Salesforce case showed Working, and the case feed logged "Status: New to Working".

The incident moved to In Progress in ServiceNow
The incident moved to In Progress in ServiceNow
The case status changed to Working in Salesforce
The case status changed to Working in Salesforce

The audit trail

Getint's Latest synced items page lists every sync with its direction, mode, duration and result. My eight syncs were all green: one create and seven updates. The updates took under five seconds each, and synced comments show up as sub-items. If something ever goes wrong, this is the first place to look.

Getint's sync log: which side triggered each sync, the synced comments and the result
Getint's sync log: which side triggered each sync, the synced comments and the result

Lessons from a ServiceNow consultant: what surprised me

The setup itself was straightforward. The interesting part was everything that didn't behave the way I first expected. Most of these lessons are about ServiceNow and Salesforce themselves, so they're worth knowing before any go-live.

1. The 401 error that had nothing to do with my password

My first ServiceNow connection failed with "401, User is not authenticated". The strange part: I could log in to the instance with the same username and password in my browser. The cause is a newer ServiceNow security feature, the basic authentication restriction, which can block API calls that use a username and password even when the UI login works. The fix is to give the integration user the snc_basic_auth_api_access role, or to make it a web service access only account. In production, I'd go one step further and use OAuth wherever you can.

2. In ServiceNow, priority is calculated, not set

The suggested mapping paired Salesforce Priority with ServiceNow Priority. Anyone who works with ServiceNow will spot the problem: Priority is calculated from Impact and Urgency, so writing to it directly doesn't stick. In my test, a High case arrived as a 4 - Low incident. That matters more than it sounds, because priority drives SLAs, and my test incident had already picked up a two-day resolution SLA. Map Salesforce Priority to Urgency, and decide how Impact gets set, either with a sensible default or from another Salesforce field.

3. Mandatory on the form isn't mandatory for the API

Getint created the incident without a Caller, even though Caller is mandatory on the incident form. That's standard ServiceNow behavior: UI policies and form-level mandatory flags only apply on the form, and only a data policy can enforce a field for API calls too. The caller in my screenshots, Abel Tuter (a demo user), is one I added by hand later, because the form won't save without one. Plan for it: set a default caller, or map the Salesforce contact to the Caller field. If you enforce Caller with a data policy, map it first, so incidents can still be created.

4. Review every automatic field match

Auto-matching saves time, but it matches by name. It paired Salesforce's read-only "Closed" checkbox with ServiceNow's "Closed" date, and it mapped Company to a ServiceNow reference field. Neither made sense. Treat the suggestions as a first draft, not the final answer.

5. "Public" in Salesforce can mean "customer-visible" in ServiceNow

This is the one I almost missed. With the default settings, a normal post on the case, written by the sales rep for colleagues, arrived in ServiceNow as an additional comment. That field is visible to the customer, and it can trigger an email to the caller. Changing the setting so public Salesforce comments become private work notes fixed it. Decide this before go-live, not after a customer reads an internal note.

A normal post from the sales rep, written for colleagues
A normal post from the sales rep, written for colleagues

6. Choose your Run As user on purpose

Every update Getint makes in Salesforce appears under the Run As user of the External Client App. In my test, that was me, so ServiceNow work notes looked as if I had written them. Getint does add the real author in a footer, but for production, create a dedicated integration user with a clear name.

7. Check special characters

The apostrophe in "I've" arrived in ServiceNow as '. It's a small formatting detail, and Getint's own screen warns that formatting can differ between platforms. Still, test a few typical messages from your team before go-live.

8. Near real time, not instant

By default, Getint checks for changes every 180 seconds, and each sync took only a few seconds. For sales and support handoffs, that's plenty. If you need tighter timing, adjust the interval, and set expectations with users either way.

On a real project, I'd check comment visibility first, because that's the mistake a customer actually sees.

Troubleshooting: symptoms, causes and fixes

If something doesn't sync the way you expect, start here. Most of these came straight from my own testing.

Symptom Cause Fix
ServiceNow connection fails with "401 User is not authenticated", but the browser login works ServiceNow's basic authentication restriction blocks API logins Give the integration user snc_basic_auth_api_access, make it a web service access only account, or use OAuth
Connection fails with a misleading permissions error Password needs reset is ticked on the integration user Untick it and set the password again
Salesforce connection fails right after you create the app A new External Client App can take a few minutes to activate Wait a few minutes, then retry
A High case arrives as a 4 - Low incident ServiceNow calculates Priority from Impact and Urgency Map Salesforce Priority to Urgency
A sync runs, but a field doesn't change on the other side On Create or On Update isn't ticked for that field Tick both on every mapped field
Incidents arrive without a Caller Records created through the API skip form-mandatory fields Set a default caller, or map the contact to Caller
Salesforce posts show up as customer-visible comments Public Salesforce comments create public ServiceNow comments by default Map public Salesforce comments to private work notes
Apostrophes show up as ' Formatting differs between platforms Test typical messages before go-live

‍

Go-live checklist

Before you switch this on for real users, run through this list. Every item comes from something I either hit or nearly missed during testing.

  • A dedicated ServiceNow integration user with itil, your custom role and the read-only ACLs
  • API access confirmed: snc_basic_auth_api_access, a web service access only account, or OAuth
  • A dedicated Salesforce Run As user with a clear name, like "ServiceNow Integration"
  • Salesforce Priority mapped to ServiceNow Urgency, with a plan for Impact
  • A default Caller, or a contact mapping, for incidents created from Salesforce
  • Comment visibility mapped, with public Salesforce posts landing as private work notes
  • Statuses mapped, including what Salesforce shows while an incident is Resolved
  • A SOQL filter, so the first go-live syncs a small, predictable set of cases
  • Every direction tested: create, field updates, comments both ways and status
  • Sync interval agreed with both teams, and someone named to check the Getint logs

What each team gets from the integration

For the sales team, the biggest win is confidence. When a customer calls, the rep opens the case and sees that a technician is booked for tomorrow at 10:00, without pinging anyone. That's what better customer experiences look like in practice: fewer "let me check and get back to you" moments.

For the support team, the incident arrives in ServiceNow with the subject, description and urgency already filled in, so it goes straight into their normal process: assignment, SLAs and reporting. They never have to leave ServiceNow.

For IT, the integration is configuration, not code. Mappings live in one place, every sync is logged, and the integration user only has the permissions it needs. When requirements change, an admin adjusts a mapping instead of starting a development project.

Conclusion

Connecting Salesforce and ServiceNow isn't the hard part. Getting the details right is where the value is. Getint handled the plumbing well: no code, clear mappings, two-way comments and a log I could actually read. The decisions that mattered most were ServiceNow decisions: urgency versus priority, mandatory fields, and which comments a customer should see.

If you're planning this for your team, my advice is simple. Start with one mapping, cases to incidents. Sync a small, filtered set of records. Test every direction, including comments. Then expand once both teams trust what they see.

Written by
Feras Qatanani
ServiceNow Consultant
Feras Qatanani is a ServiceNow presales consultant based in Amman, Jordan, working mainly on ITSM and ITOM. He is a ServiceNow Certified System Administrator (CSA) and holds the CIS-Data Foundations certification (CMDB and CSDM). He shares his work at ferasqatanani.me and on LinkedIn.
Uploading...
fileuploaded.jpg
Upload failed. Max size for files is 10 MB.
By submitting your application, you agree to our Privacy Policy and consent to the processing of your personal data by Getint sp. z o.o. for the purposes of current and future recruitment. You can withdraw your consent at any time by contacting us at getint@getint.io. You also have the right to access, correct, erase, restrict, or transfer your data, and to object to its processing.
Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.
Frequently asked questions

Have questions?

We've got you!

Our comprehensive FAQ section addresses the most common inquiries about our integrations, setup process, pricing, and more - making it easy to find the answers you need quickly.

Does Getint support bidirectional sync between Salesforce and ServiceNow?

Yes. Getint supports two-way data synchronization between Salesforce CRM and ServiceNow, allowing teams to sync data, including fields, statuses, and comments, in both directions. For example, the integration can automatically create a ServiceNow incident from a Salesforce case and keep both records updated.

This automation helps the sales team and ServiceNow team collaborate without constantly switching platforms or manually transferring information. It is especially useful for high-value workflows such as customer escalations and incident resolution.

Which Salesforce objects can I sync with ServiceNow records?

In my test, I integrated Salesforce cases with ServiceNow incidents. Getint's documentation also describes other mappings, such as Salesforce accounts with ServiceNow tasks. The available functionality depends on the objects, fields, and permissions configured for each connection.

Before setting up the integration, it's important to define a clear system of record. For example, Salesforce can remain the authoritative sales system for customer information, while ServiceNow manages incident statuses and resolution activities. Establishing data ownership helps maintain data integrity across both platforms and supports more reliable reporting, forecasting, and analytics.

Do I need ServiceNow Integration Hub?

No. Getint connects to ServiceNow through its standard REST API, so this setup doesn't require an Integration Hub subscription.

When choosing between integration solutions, consider the architecture, scalability, and error-handling capabilities you need. An iPaaS platform like Getint can simplify connections between external platforms without requiring custom scripts for every workflow. Robust error handling and monitoring are particularly important for complex workflows, where network timeouts or validation rule failures can interrupt synchronization. Reviewing sync logs helps teams identify problems and minimize their impact.

Can I limit which Salesforce cases sync?

Yes. Getint supports optional SOQL filters that let you control which Salesforce records participate in synchronization. For example, you can configure the integration to process only escalated cases rather than every record in your CRM.

I'd recommend testing the integration in a sandbox environment or dedicated developer instances before production. This helps verify field mappings, status transitions, and automation rules without affecting live customer data. Start with a small, filtered set of records, confirm the expected behavior, and then expand the integration.

How can I measure the success of ServiceNow with Salesforce integration?

After launch, monitor sync success rates, end-to-end synchronization latency, and recurring errors to verify that records move between systems as expected. Getint provides synchronization logs showing the direction, duration, and result of individual operations, making it easier to investigate failures.

Beyond technical performance, measure how the integration improves business processes. For example, reducing manual data entry, accelerating customer escalations, and keeping CRM and service records consistent can improve productivity and support better analytics.

To achieve long-term success, focus automation on high-value workflows and review performance as integration requirements evolve. Clear business processes, reliable data ownership, and ongoing monitoring are essential for maintaining scalability.

Success Stories

See How We Make a Difference

Every integration tells a story of improved workflows, enhanced collaboration, and organizational growth. Explore how businesses across industries have leveraged our solutions to overcome challenges, optimize processes, and achieve remarkable results.

Experience a smarter way to integrate & synchronize.

Discover the power of seamless connections, bridging your favorite tools for optimized workflow and productivity. Unleash the potential of unified platforms with Getint.
Book a Demo
getint git repos integration