JAMF servicenow integration

snowsid88
Tera Contributor

what are the steps need to perform to integrate JAMF with servicenow cmdb_ci_computer table without service graph connector available in servicenow.

1 ACCEPTED SOLUTION

AJ-TechTrek
Giga Sage
Giga Sage

Hi @snowsid88 ,

 

step-by-step solution for integrating JAMF with the ServiceNow cmdb_ci_computer table when the Service Graph Connector (SGC) is not available.
This approach uses standard Import Sets, Transform Maps, and (optional) MID Server integration.

 

Step-by-step solution: Integrate JAMF with ServiceNow CMDB without SGC


Step 1: Understand and gather JAMF data
* Identify how to pull data from JAMF:
* JAMF has a REST API (most common).
* You may also have export options (e.g., CSV, scheduled reports).
* Decide whether:
* ServiceNow will pull data from JAMF (preferred), or
* JAMF will push data to ServiceNow.

 

Step 2: Choose integration method
If pulling data:
* Use IntegrationHub (if you have it) to call JAMF API.
* Or use Scripted REST APIs or a custom integration script with RESTMessageV2.
If pushing data:
* JAMF exports data to CSV/JSON → use ServiceNow Import Set API to ingest.

 

Step 3: Create Import Set table
* Go to: System Import Sets > Create Table.
* Create an import set table, e.g., u_jamf_computers_import.
* Add fields matching the data you'll get from JAMF (serial number, hostname, OS, model, etc.).

 

Step 4: Configure data pull / load

 

Option A: Use REST API
* Go to: System Web Services > REST Message.
* Create a new REST Message to JAMF:
* URL: JAMF API endpoint (e.g., https://<your-jamf-instance>/JSSResource/computers)
* Add necessary HTTP headers.
* Add authentication (basic auth or token).
* Create a REST Scripted Import Set:
* Use RESTMessageV2 in a script to call JAMF API and map the data into the Import Set table.


Option B: Use CSV
* JAMF schedules export to SFTP.
* Use MID Server to fetch file or manually upload to Import Set.

 

Step 5: Build Transform Map
* Create a Transform Map:
* Source: your import set table (e.g., u_jamf_computers_import)
* Target: cmdb_ci_computer.
* Use field maps to map fields: e.g., serial number → serial_number, etc.

 

Step 6: Use IRE (Identification and Reconciliation Engine)
* Use the Identification Rule to avoid duplicates:
* Go to: Identification Rules.
* Make sure there's an Identifier Rule for cmdb_ci_computer (e.g., serial number as identifier).
* In your transform script, instead of directly inserting/updating:
* Build a payload to send to IdentificationEngine (IRE).
* Example transform script snippet:
(function runTransformScript(source, map, log, target) {
var payload = {
items: [{
className: "cmdb_ci_computer",
values: {
name: source.u_hostname,
serial_number: source.u_serial_number,
os: source.u_os,
os_version: source.u_os_version
}
}]
};

var IdentificationEngine = new GlideIdentificationEngine();
var result = IdentificationEngine.createOrUpdateCI(JSON.stringify(payload));
log.info('IRE result: ' + result);
})(source, map, log, target);

 

Step 7: Test & validate
* Run the transform.
* Verify:
* Data appears in cmdb_ci_computer.
* No duplicates.
* Updates existing records if they match.

 

Step 8: Automate
* Schedule:
* REST data pull to run daily / hourly.
* CSV import to process automatically on file arrival.

 

Summary
Without SGC, the flow:
JAMF → REST API / CSV → Import Set → Transform Map → IRE → cmdb_ci_computer
* Use Import Sets and Transform Maps to map data.
* Use IRE to handle updates vs. creates (avoid duplicates).
* Automate via schedules.

 

Please appreciate the efforts of community contributors by marking appropriate response as Mark my Answer Helpful or Accept Solution this may help other community users to follow correct solution in future.
 
Thank You
AJ - TechTrek with AJ
LinkedIn:- https://www.linkedin.com/in/ajay-kumar-66a91385/
YouTube:- https://www.youtube.com/@learnitomwithaj
ServiceNow Community MVP 2025

View solution in original post

3 REPLIES 3

wojasso
Giga Guru

Hi @snowsid88

The Jamf Pro integration isn’t provided out of the box. To populate the cmdb_ci_computer table you need to build a custom integration using Jamf’s REST API and the import set pipeline. A typical approach is:

  • Gather Jamf API credentials: Create an API account in Jamf Pro and note the URL, client ID and secret to get a bearer token. Jamf’s APIs include endpoints such as /v1/computers-inventory to pull computer inventory.
  • Create a data source in ServiceNow: Configure an HTTP data source or use sn_ws.RESTMessageV2 to call the Jamf API and retrieve computer data as JSON.
  • Stage the data: Create an import set table with columns for serial number, name, model, OS version, etc. Use a scheduled job or Flow Designer flow to parse the API response and insert rows into this import table.
  • Transform to CMDB: Define a transform map that maps import set fields to cmdb_ci_computer fields. Include coalesce rules on serial number or asset tag to update existing CIs and set discovery_source to “Jamf”.
  • Automate and maintain: Run the import on a regular schedule, handle pagination and token renewal in your script, and monitor for schema changes in Jamf.

Here’s a simple example of calling the Jamf API in a scheduled script:

var rm = new sn_ws.RESTMessageV2();
rm.setHttpMethod('GET');
rm.setEndpoint('https://your-jamf-url/api/v1/computers-inventory');
rm.setRequestHeader('Authorization', 'Bearer ' + bearerToken);
var response = rm.execute();
var data = JSON.parse(response.getBody());
// iterate over data and insert into import set table

This pattern follows ServiceNow best practices for external data sources. Once the data is imported and transformed, your CMDB will have accurate records from Jamf.



🔥 Was this answer useful? 👉 If so, click 👍 Helpful 👍 or Accept as Solution 💡🔧🤔🙌

AJ-TechTrek
Giga Sage
Giga Sage

Hi @snowsid88 ,

 

step-by-step solution for integrating JAMF with the ServiceNow cmdb_ci_computer table when the Service Graph Connector (SGC) is not available.
This approach uses standard Import Sets, Transform Maps, and (optional) MID Server integration.

 

Step-by-step solution: Integrate JAMF with ServiceNow CMDB without SGC


Step 1: Understand and gather JAMF data
* Identify how to pull data from JAMF:
* JAMF has a REST API (most common).
* You may also have export options (e.g., CSV, scheduled reports).
* Decide whether:
* ServiceNow will pull data from JAMF (preferred), or
* JAMF will push data to ServiceNow.

 

Step 2: Choose integration method
If pulling data:
* Use IntegrationHub (if you have it) to call JAMF API.
* Or use Scripted REST APIs or a custom integration script with RESTMessageV2.
If pushing data:
* JAMF exports data to CSV/JSON → use ServiceNow Import Set API to ingest.

 

Step 3: Create Import Set table
* Go to: System Import Sets > Create Table.
* Create an import set table, e.g., u_jamf_computers_import.
* Add fields matching the data you'll get from JAMF (serial number, hostname, OS, model, etc.).

 

Step 4: Configure data pull / load

 

Option A: Use REST API
* Go to: System Web Services > REST Message.
* Create a new REST Message to JAMF:
* URL: JAMF API endpoint (e.g., https://<your-jamf-instance>/JSSResource/computers)
* Add necessary HTTP headers.
* Add authentication (basic auth or token).
* Create a REST Scripted Import Set:
* Use RESTMessageV2 in a script to call JAMF API and map the data into the Import Set table.


Option B: Use CSV
* JAMF schedules export to SFTP.
* Use MID Server to fetch file or manually upload to Import Set.

 

Step 5: Build Transform Map
* Create a Transform Map:
* Source: your import set table (e.g., u_jamf_computers_import)
* Target: cmdb_ci_computer.
* Use field maps to map fields: e.g., serial number → serial_number, etc.

 

Step 6: Use IRE (Identification and Reconciliation Engine)
* Use the Identification Rule to avoid duplicates:
* Go to: Identification Rules.
* Make sure there's an Identifier Rule for cmdb_ci_computer (e.g., serial number as identifier).
* In your transform script, instead of directly inserting/updating:
* Build a payload to send to IdentificationEngine (IRE).
* Example transform script snippet:
(function runTransformScript(source, map, log, target) {
var payload = {
items: [{
className: "cmdb_ci_computer",
values: {
name: source.u_hostname,
serial_number: source.u_serial_number,
os: source.u_os,
os_version: source.u_os_version
}
}]
};

var IdentificationEngine = new GlideIdentificationEngine();
var result = IdentificationEngine.createOrUpdateCI(JSON.stringify(payload));
log.info('IRE result: ' + result);
})(source, map, log, target);

 

Step 7: Test & validate
* Run the transform.
* Verify:
* Data appears in cmdb_ci_computer.
* No duplicates.
* Updates existing records if they match.

 

Step 8: Automate
* Schedule:
* REST data pull to run daily / hourly.
* CSV import to process automatically on file arrival.

 

Summary
Without SGC, the flow:
JAMF → REST API / CSV → Import Set → Transform Map → IRE → cmdb_ci_computer
* Use Import Sets and Transform Maps to map data.
* Use IRE to handle updates vs. creates (avoid duplicates).
* Automate via schedules.

 

Please appreciate the efforts of community contributors by marking appropriate response as Mark my Answer Helpful or Accept Solution this may help other community users to follow correct solution in future.
 
Thank You
AJ - TechTrek with AJ
LinkedIn:- https://www.linkedin.com/in/ajay-kumar-66a91385/
YouTube:- https://www.youtube.com/@learnitomwithaj
ServiceNow Community MVP 2025

snowsid88
Tera Contributor

Thanks Ajay Kumar for the helpful answer in brief and details.

 

it is really helpful...and help to implement.