---
title: "How to Bulk Import Knowledge Articles into ServiceNow (Easy Import, Import Sets, REST)"
description: "Three ways to load hundreds or thousands of articles into the kb_knowledge table, the fields you need to fill, why HTML sometimes arrives as literal text, how images are handled, and the batch sizes that avoid timeouts."
canonical: https://ocho.bot/blog/bulk-import-knowledge-articles-into-servicenow
last_updated: 2026-09-12
---

# How to Bulk Import Knowledge Articles into ServiceNow (Easy Import, Import Sets, REST)

> Three ways to load hundreds or thousands of articles into the kb_knowledge table, the fields you need to fill, why HTML sometimes arrives as literal text, how images are handled, and the batch sizes that avoid timeouts.

Published: 2026-09-12

When you have more articles than anyone will paste by hand, ServiceNow gives you three ways to load them into the `kb_knowledge` table: Easy Import from a spreadsheet, Import Sets with a transform map, and the REST Table API. All three take article bodies as HTML and create records that follow the normal knowledge lifecycle. This guide explains the fields to fill, the differences between the three routes, and the two failure modes that account for most support threads: HTML rendered as literal text, and imports that time out.

## The fields that matter

Every article is a row in `kb_knowledge`. Whichever route you use, these are the fields to prepare per article:

- **short_description**: the article title. Every article needs one.
- **text**: the article body as HTML. Headings, paragraphs, lists, links, and tables. Inline images need attachment URLs (see below).
- **kb_knowledge_base**: the knowledge base, as a sys_id or display name.
- **kb_category**: the category within that knowledge base.
- **valid_to**: the validity date. If you leave it empty it defaults from the knowledge base's Article Validity setting, or to 1 January 2100.
- **author**: a user reference. Defaults to the importing user if omitted.
- **article_type**: HTML or wiki. Use HTML.
- **ownership group**: if Knowledge Management Advanced is active and your instance uses ownership groups for approvals.

The article number (KB0010061 and so on) is assigned automatically; do not supply it. The workflow state is set by the knowledge base's workflow, so new records start in Draft. Do not try to insert directly as Published; import into Draft and publish through the workflow, in bulk if you must, so that approvals and versioning behave.

## Route 1: Easy Import from Excel

Easy Import is the spreadsheet route built into every list view. It is documented in a ServiceNow-authored procedure for knowledge articles.

1. Open Knowledge, Articles, All. Right-click the list header and choose Import.
2. Click Create Excel Template. ServiceNow generates a spreadsheet with a column per field. Fill one row per article. Put the article HTML in the Text column.
3. Upload the completed file. Click Preview Imported Data and check that knowledge base, category, and author resolved to real records.
4. Click Complete Import. The articles are created in Draft.

Two caveats from ServiceNow's own procedure: import in small batches to avoid request timeouts, and stay within Excel's cell limits, which long HTML bodies can exceed. A community thread also reports HTML tags appearing as literal text after an Excel import. If that happens on your instance, use route 2, where the transform map targets the HTML field explicitly.

Easy Import is described by ServiceNow as suited to articles without embedded media. Images need separate handling on every route, but with Easy Import there is no way to attach files during the same operation.

## Route 2: Import Sets with a transform map

Import Sets are the general-purpose data loader: a staging table, a transform map from staging columns to target fields, and a run. For knowledge articles the value over Easy Import is control.

1. Create a data source (System Import Sets, Load Data) from a CSV, Excel, or JSON file, or from a JDBC or REST connection to the old system.
2. Load the data into a new import set table.
3. Create a transform map to `kb_knowledge`. Map short_description, text, kb_knowledge_base, kb_category, valid_to, author, and any custom fields. Use a coalesce field, such as a source article id stored in a custom field, so that re-running the import updates existing articles instead of duplicating them.
4. Add transform scripts where the source needs cleanup: stripping the old system's wrapper HTML, rewriting internal links, or mapping old categories to new ones.
5. Run the transform. Check the import set's log for rows that failed to resolve references.

Import Sets are the right choice when you will run the import more than once, when the source is a database or an API rather than a spreadsheet, or when field mapping is more than one-to-one.

## Route 3: REST Table API

For anything scripted, the Table API is the most direct. ServiceNow's knowledge import guide points at it for large batches.

The response contains the new record's sys_id. Use it to attach files:

To show an uploaded image inline, reference the attachment in the article HTML after upload. The attachment size limit is the instance property `com.glide.attachment.max_size`, with a documented default of 1024 MB.

The calling user needs the table's insert permission through roles and ACLs. Send display values instead of sys_ids by adding `sysparm_input_display_value=true` to the URL, which is convenient for category names but slower and less exact than sys_ids.

## Batch size and rate

There is no documented maximum. ServiceNow's advice for spreadsheet imports is small batches to avoid request timeouts, and the same logic applies to API loops: one request per article, a pause between batches, and a log of sys_ids so a failed run can resume. We suggest a few hundred articles per hour with a pause between batches. A script that sends thousands of requests at once produces timeouts and partial imports that you then have to reconcile by hand.

## The problem no import fixes

All three routes copy content. None of them decide what the content should be. A bulk import of 4,000 SharePoint pages produces 4,000 draft articles, including the nine copies of the password reset procedure and the runbook that references a system retired in 2019. The ServiceNow community's own migration write-ups end with the same lesson: the import took days, the cleanup took months.

That cleanup is what Ocho does before the import. It reads the whole source set, builds a map of which pages cover the same topic and which version is current, gives every page a keep, archive, or duplicate verdict with a logged reason, and drafts one consolidated article per topic that cites its sources. Your experts approve each draft, and only approved articles are published to ServiceNow. For a team with thousands of pages and no one free to read them, that is the difference between a migration and a copy. The [SharePoint to ServiceNow migration page](/leave-sharepoint) describes the two-week, fixed-price triage that starts the engagement.

## Questions

### Can I import directly as Published?

Insert into Draft and publish through the workflow. Forcing the state on insert bypasses approvals and versioning, and on instances with Approval Publish workflows it produces inconsistent records.

### How do I avoid duplicates on a re-run?

Store the source system's id in a custom field on `kb_knowledge` and coalesce on it in the transform map, or query the field before each API insert.

### What about article versions?

Article versioning is part of Knowledge Management Advanced. If it is active, edits made after the import create new versions through the normal process.

### Is there a limit on article body length?

No official limit is documented. Community reports mention a 65,000 character default on HTML fields that is enforced in the UI rather than the database. Long bodies are usually a sign the source document should be several articles.

## Sources and how we checked

Checked on 2026-09-12 against ServiceNow documentation and ServiceNow-authored community material.

- ServiceNow procedure: [Import articles into ServiceNow Knowledge Management (PDF)](https://www.servicenow.com/community/s/cgfwn76974/attachments/cgfwn76974/knowledge-management-articles/47/1/2023%20Procedure%20-%20Knowledge%20Article%20Import.pdf)
- ServiceNow community: [Options for importing external articles into ServiceNow](https://www.servicenow.com/community/knowledge-management-articles/options-for-importing-external-articles-into-servicenow/ta-p/2673388)
- ServiceNow community: [HTML text in knowledge article bulk import](https://www.servicenow.com/community/developer-forum/html-text-in-knowledge-article-bulk-import/m-p/2153760)
- ServiceNow docs: [Table API](https://www.servicenow.com/docs/r/api-reference/rest-apis/c_TableAPI.html), [Attachment API](https://www.servicenow.com/docs/r/api-reference/rest-apis/c_AttachmentAPI.html), [Create a knowledge article](https://www.servicenow.com/docs/bundle/zurich-servicenow-platform/page/product/knowledge-management/task/create-knowledge-article.html)
- ServiceNow docs: [Knowledge workflows](https://www.servicenow.com/docs/bundle/washingtondc-servicenow-platform/page/product/knowledge-management/reference/r_KnowledgeWorkflows.html)

---

Ocho — AI knowledge orchestration · [Home](https://ocho.bot/) · [Docs](https://ocho.bot/docs) · [Blog](https://ocho.bot/blog) · [About](https://ocho.bot/about) · [Developers](https://ocho.bot/developers) · [Contact](https://ocho.bot/contact) · [llms.txt](https://ocho.bot/llms.txt)
