Help Center for SaaS

Export Zendesk Help Center: Methods and What Gets Lost

Three methods to export a Zendesk Help Center: official API with code, manual CSV from the UI, third-party migration tools. Plus what every method silently loses.
June 2, 2026
Henrik Roth
Export Zendesk Help Center, methods and what gets lost
TL;DR
  • Zendesk does not have a built-in export button. The Help Center API is the official recommendation.
  • Three methods: Help Center API (full fidelity, free, code required), manual CSV from the UI (titles only, audit-grade), third-party tools like Help Desk Migration ($99 to $5,000+, hands-off).
  • The main endpoint returns 30 articles per page by default. Switch to cursor pagination with page size 100 for anything over a few hundred articles.
  • Rate limits per Zendesk Suite plan, per minute: Team 200, Growth and Professional 400, Enterprise 700, Enterprise Plus 2,500.
  • Attachments are out of scope of the official API export. Parse image URLs from article bodies and download separately, or your backup breaks the day the Zendesk account is canceled.
  • Lost in every method: search synonyms, view counts, permission settings, version history, theme code (some plans), URL aliases, article subscriptions.
  • Re-importing the export into a new help center on the same content model gets you the same drift problem six months later. Plan the destination architecture, not just the file format.

You want to export your Zendesk Help Center. The reasons usually fall into three buckets: you are migrating off Zendesk Guide, you want a real backup the vendor cannot accidentally delete, or you are running an audit and need the articles on your own machine to grep through. The bad news is that Zendesk does not give you a one-click export button. The good news is that the Help Center API will give you everything that matters, if you know which endpoints to call and what gets dropped along the way.

This guide covers three methods: the official Help Center API (recommended), the manual CSV approach from the Zendesk UI (limited), and third-party migration tools (fastest if you can pay). It includes a starter Python script you can run against your own subdomain, the gotchas around attachments and image URLs, and the list of things that no method exports cleanly: search synonyms, view counts, ratings, permission settings, and (depending on your plan) the full comment history.

Pick the method that matches your situation, then read the "what gets lost" section before you trust the output.

Process flow, zendesk help center api export workflow, six steps from authenticate to local backup

Three methods to export Zendesk Help Center

The right method depends on whether you have engineering time, whether you need full fidelity, and whether you trust a third party with the dump. Here is the short comparison.

Method Best for Effort Cost Fidelity
Help Center API Migration, backup, audit. Anything that needs all the metadata. Engineer for a day, or a Python script that already exists. Free, plus your API rate-limit ceiling. High. Article body, sections, categories, attachments, locale, labels, vote counts.
Manual CSV from UI Quick spreadsheet view of titles and metadata. Audit only. Fifteen minutes. Free. Low. Titles and metadata only. No bodies, no attachments.
Third-party tool Migrations to a specific destination platform, no engineering capacity. Click, wait, review. $99 (Zendesk Marketplace apps) to $5,000+ (Help Desk Migration volume). Medium to high, depending on tool and destination mapping.

The API is the only path that returns the full article body, the section and category hierarchy, and the locale metadata in one structured dump. Everything else is either a subset or a paid translation layer on top of the same API.

Method 1: Help Center API (recommended)

The Help Center API is what Zendesk's own backup guide recommends. It is REST, JSON, basic-auth with an API token, and it returns articles, sections, categories, and translations as separate endpoints. You will need an admin role on the Zendesk account to create the token, and you will run into rate limits if you do not paginate properly.

Setup: API token and rate limits

Generate an API token in the Zendesk Admin Center under Apps and integrations, Zendesk API, Settings tab, enable token access, and add a token. Save it. You will authenticate as {email_address}/token in basic auth, with the token as the password.

Rate limits vary by Zendesk Suite plan, and the Help Center API counts separately from the Support API:

Suite plan Requests per minute Practical export window
Team 200 About 12,000 articles per hour, before sections and attachments.
Growth 400 Roughly 24,000 articles per hour.
Professional 400 Same as Growth.
Enterprise 700 About 42,000 articles per hour.
Enterprise Plus 2,500 Effectively unlimited for help center sizes anyone reading this has.

The numbers are per Zendesk's published rate limit documentation, verified 2026-05-23. If you hit the limit, the API returns a 429 response with a Retry-After header. Respect the header, do not retry in a loop without backoff.

Pull articles

The base endpoint is GET /api/v2/help_center/{locale}/articles.json on your Zendesk subdomain. For example, https://yoursubdomain.zendesk.com/api/v2/help_center/en-us/articles.json. The locale segment is optional for admins and agents but required if you are calling as an end user.

The default response returns up to 30 articles per page with a next_page URL in the response body. To raise the page size and switch to cursor pagination, add ?page[size]=100. Cursor pagination is the preferred method per Zendesk's own docs for any help center over a few hundred articles.

A starter curl call:

curl -u "admin@yourcompany.com/token:YOUR_API_TOKEN" \
  "https://yoursubdomain.zendesk.com/api/v2/help_center/en-us/articles.json?page[size]=100"

Each article object returns id, title, body (HTML), author_id, created_at, updated_at, edited_at, draft, promoted, position, section_id, locale, vote_sum, vote_count, label_names, and a few more. The body field is the HTML rendered into the help center, including all inline images and links.

Pull sections and categories

Articles arrive as a flat list. To rebuild the hierarchy, you need two more endpoints:

  • GET /api/v2/help_center/sections.json returns the sections, each with a parent category_id.
  • GET /api/v2/help_center/categories.json returns the top-level categories.

Pull these once. Build a lookup of section_id to section name and category, then enrich each article record with that hierarchy before writing the backup. If you skip this step, the export is a long list of titles with no structure, which is fine for grep but useless for migration.

Pull attachments and images

This is where most export scripts quietly fail. The article body field is HTML. Images inside the HTML are <img> tags pointing at URLs on your Zendesk subdomain, in the form https://yoursubdomain.zendesk.com/hc/article_attachments/{attachment_id}. Those URLs are tied to the article in Zendesk's content store. If the article is deleted in Zendesk later, the image URL stops resolving.

Zendesk's official backup guide is explicit on this point: backing up the images is outside the scope of the article. You have to do it yourself. The pattern is:

  1. For each article, parse the body HTML and pull every <img src="..."> and any <a href="..."> that points to an attachment URL.
  2. Download each file separately. Use the same basic auth credentials.
  3. Save the file to a local attachments/ folder, named by attachment_id and original filename.
  4. Rewrite the body HTML to point at the local path.

Skipping this step is the most common reason a Zendesk export looks complete but breaks the moment the source account is canceled.

Code template: full export script

Below is a starter template. It pulls articles with cursor pagination, pulls sections and categories, downloads attachments, and writes everything to a local directory. Treat it as a working starting point, not a production system. Verified against the Zendesk Help Center API docs on 2026-05-23.

#!/usr/bin/env python3
"""
zendesk_export.py
Starter template. Pulls articles, sections, categories, and attachments
from a Zendesk Help Center and writes them locally.

Verified against developer.zendesk.com Help Center API docs, 2026-05-23.
"""
import json
import os
import re
import time
from pathlib import Path
import requests

SUBDOMAIN = os.environ["ZENDESK_SUBDOMAIN"]   # e.g. "acme"
EMAIL     = os.environ["ZENDESK_EMAIL"]       # admin email
TOKEN     = os.environ["ZENDESK_API_TOKEN"]
LOCALE    = "en-us"
OUTDIR    = Path("./zendesk_backup")

AUTH    = (f"{EMAIL}/token", TOKEN)
BASE    = f"https://{SUBDOMAIN}.zendesk.com/api/v2/help_center"
HEADERS = {"Accept": "application/json"}

def get_paged(url):
    """Yield items from a paginated endpoint, respecting Retry-After."""
    while url:
        r = requests.get(url, auth=AUTH, headers=HEADERS, timeout=30)
        if r.status_code == 429:
            wait = int(r.headers.get("Retry-After", "10"))
            print(f"rate limited, sleeping {wait}s")
            time.sleep(wait)
            continue
        r.raise_for_status()
        data = r.json()
        # the response key matches the endpoint: articles, sections, categories
        key = next(k for k in data if isinstance(data[k], list))
        yield from data[key]
        url = data.get("next_page")

def download_attachments(article, attachments_dir):
    body = article.get("body") or ""
    urls = re.findall(r'(?:src|href)="([^"]+)"', body)
    saved = []
    for u in urls:
        if f"{SUBDOMAIN}.zendesk.com" not in u:
            continue
        if "/article_attachments/" not in u and "/hc/" not in u:
            continue
        fname = u.rsplit("/", 1)[-1].split("?")[0] or "file"
        local = attachments_dir / f"{article['id']}_{fname}"
        if not local.exists():
            resp = requests.get(u, auth=AUTH, timeout=60)
            if resp.status_code == 200:
                local.write_bytes(resp.content)
                saved.append((u, str(local)))
    return saved

def main():
    OUTDIR.mkdir(parents=True, exist_ok=True)
    attachments_dir = OUTDIR / "attachments"
    attachments_dir.mkdir(exist_ok=True)

    sections   = list(get_paged(f"{BASE}/sections.json?page[size]=100"))
    categories = list(get_paged(f"{BASE}/categories.json?page[size]=100"))
    (OUTDIR / "sections.json").write_text(json.dumps(sections, indent=2))
    (OUTDIR / "categories.json").write_text(json.dumps(categories, indent=2))

    articles_out = []
    for art in get_paged(f"{BASE}/{LOCALE}/articles.json?page[size]=100"):
        saved = download_attachments(art, attachments_dir)
        art["_saved_attachments"] = saved
        articles_out.append(art)
        print(f"saved {art['id']} {art['title'][:60]}")

    (OUTDIR / "articles.json").write_text(json.dumps(articles_out, indent=2))
    print(f"done. {len(articles_out)} articles, {len(sections)} sections, "
          f"{len(categories)} categories")

if __name__ == "__main__":
    main()

Run it with the three environment variables set. For a thousand-article help center on the Growth plan, expect roughly two to three minutes for the article pull, plus whatever time the attachments take depending on file sizes. The script is deliberately small. It does not retry on transient errors beyond the 429 case, it does not handle multilingual locales beyond the one passed in, and it does not preserve draft articles separately. Add those when you need them.

Method 2: Manual CSV export from the Zendesk UI

The Zendesk UI does not have a help center export button, but it does have a content filter inside the Guide admin that you can use to view article lists and copy the metadata into a spreadsheet. This is useful for an audit or a content inventory, and almost useless for a migration.

The path: in your Zendesk account, open Guide admin, click the Arrange content view, filter by section or category, and you get a list of article titles with author, last edit date, and status. There is no native "download" button. You either screenshot the view or use a browser extension to scrape the table. Some teams paste the visible rows into Google Sheets.

What you get from the UI export approach: titles, authors, dates, statuses, section names. What you do not get: article bodies, attachments, vote counts, labels, draft content, translation states, or anything inside the HTML body of an article. This method is fine if you want a list of "what articles do we have" for a quarterly review. It is not a backup.

Method 3: Third-party migration tools

If you are migrating to a specific destination platform and you do not want to write the script, the Zendesk Marketplace and the broader migration tool ecosystem covers most paths. The trade-off is cost and trust: these tools authenticate to your Zendesk account and your destination account, then copy data between them.

  • Help Desk Migration. Most common third-party tool for Zendesk Guide migrations. Pricing depends on volume, typical range is $500 to $5,000 for help center migrations, more for ticket data on top. Supports most destinations: Help Scout, Freshdesk, HubSpot, Intercom, Document360.
  • Zenplates Help Center Import. Zendesk Marketplace app, $99 one-time. Mostly used for the reverse direction (importing into Zendesk) but has read access for exports too. Limited destination coverage.
  • kBackup. Knowledge base backup tool, mentioned in Zendesk's own community as a third-party option. Snapshot model: pay for a periodic backup of help center content.
  • Import2. Generalist data migration tool, covers Zendesk along with other helpdesks. Quote-based pricing.

Use a third-party tool when you have a known destination, a fixed timeline, and limited engineering bandwidth. Use the API when you want full control, when you need a backup that does not depend on a third party staying in business, or when the destination is not on the tool's supported list. The API also gives you a more honest accounting of what survived the transfer, because you wrote the mapping yourself.

What gets lost in every method

This is the section to read before you commit to any export. The Help Center API returns the article body, the structural metadata, and the per-article statistics. It does not return everything in the help center. Manual CSV and third-party tools tend to lose even more. The list:

  • Search synonyms. Configured in Guide admin under Search settings. These are tuning data the search engine uses to match queries to articles. Not exported by any method. Manually screenshot or copy them before you migrate.
  • Article view counts. The article object returns vote_sum and vote_count, but not the page view metric you see in Guide analytics. Page views live in the Insights or Explore product, which is a separate export path.
  • Permission settings. Restricted articles have a user_segment_id, but the user segment definition (who is in the segment, by tag or org) is not part of the article export. Pull /api/v2/help_center/user_segments.json separately if you need this.
  • Ratings and comments. The API exposes ratings as part of the article object. Comments are on a different endpoint, /api/v2/help_center/articles/{id}/comments.json, and only the Guide Enterprise plan exposes comment threads in full. Lower plans return limited data.
  • Version history. Zendesk keeps a version log for each article that you can see in the editor. The API does not expose that history. Once exported, you have the current version of the body and nothing earlier.
  • Theme and branding. CSS, templates, custom JavaScript, header and footer HTML. Some plans (Professional and above) let you import and download the theme via the Guide admin. Other plans require you to copy the code manually into a text editor.
  • Article aliases and redirects. URL aliases configured for SEO or migration backstops are not part of the article object. Plan to recreate them at the destination.
  • Article subscriptions. End users who subscribed to an article or a section for notifications. The subscription list is in the API, but it is a separate endpoint and almost no migration tool pulls it.

Print this list. Walk it through with your team before the migration window opens. The most common post-migration support tickets are not about missing articles, they are about missing synonyms, missing redirects, and missing per-article permission rules that quietly stop working when the content lands in the new system.

After the export: what to do with the data

Once the JSON dump is on your machine, the work is not done. The export is the input to one of three follow-up workflows.

For a backup, store the dump somewhere you control (S3, your own object store), encrypt it, and add it to your retention schedule. Rerun the export script monthly or after major content updates. Test the restore path once a year. A backup you cannot restore is not a backup.

For a migration, the next step is to map Zendesk fields to the destination platform's fields. Categories map to whatever the destination calls top-level groupings. Sections map to subgroups or tags. The HTML body usually round-trips fine into Markdown via a converter like Pandoc or html2text, but be careful: Zendesk's HTML often contains <div> wrappers and inline styles that do not survive the conversion cleanly. Spot-check the first ten articles before you bulk import.

For an audit, the JSON is the input to whatever analysis you wanted. The common questions: which articles have not been edited in 12 months, which have low vote_sum but high vote_count (high views, low helpfulness), which point at URLs that 404 now, which use product terminology you have since changed. We wrote about the cost of stale content in the hidden cost of documentation decay, and the export is the file you grep through to quantify it for your own help center.

The deeper question is what comes next. Re-importing a stale Zendesk export into a new help center on the same content model gets you the same problem in a new wrapper. The articles drift out of sync with the product the same way. A self-updating help center closes the loop by tying article content to the product code that ships behind it, so the body stays current when the product changes. If you are exporting because the Zendesk content has gone stale faster than your team can fix it, the export is the start of the migration, but the destination architecture is the part that decides whether the new help center stays useful in six months.

For a side-by-side cost view if Zendesk's plan pricing was part of the reason for the export, our writeup on Zendesk Guide pricing walks through the tiers and the maintenance overhead that pushes most teams to evaluate alternatives.

Frequently asked questions

What is the best method to export a Zendesk Help Center?

The Help Center API is the best method for full fidelity. It returns articles, sections, categories, and the metadata you need for a migration or backup. Manual CSV from the UI is fine for a quick title-and-author audit. Third-party tools like Help Desk Migration are best when you have a known destination platform and no engineering capacity to write the script yourself.

What gets lost when you export a Zendesk Help Center?

Every method loses search synonyms, article view counts (those live in Insights, not the article object), the user-segment definitions behind permission settings, version history, theme and branding code on plans below Professional, URL aliases and redirects, and end-user subscriptions. The API gets the body, the structure, and the per-article statistics. Everything else needs to be exported manually or rebuilt at the destination.

How long does the Help Center API export take?

A help center with 1,000 articles takes roughly two to three minutes on the Growth plan (400 requests per minute), excluding attachments. On the Team plan (200 requests per minute) it takes about twice as long. Attachments add time depending on file sizes and how many images are inline in your articles. A 5,000-article help center with heavy image use on the Enterprise plan typically finishes inside 30 minutes.

Is there a built-in export button in Zendesk Guide?

No. Zendesk explicitly states the platform "does not have a prebuilt tool to export articles." The official recommendation is the Help Center API. The Guide UI provides a content filter view that can be used as a manual audit, but there is no native bulk download option for the article bodies.

Can I export a Zendesk Help Center without admin access?

You need at least an admin role on the Zendesk account to generate an API token. Agent-level accounts can sometimes call the API with their own credentials and read public articles, but they cannot access the full content of restricted articles or generate the token in the first place. If you do not have admin access, ask whoever does to either create the token for you or run the export and hand you the dump.

Discover HappySupport

Stop exporting docs that drifted six months ago. HappySupport keeps every article current with every product release.

  • Articles stay accurate when the product changes, no manual chase.
  • Customers find the right answer the first time after the move.
  • Sits beside Intercom, Zendesk, Help Scout, HubSpot, Front, or Freshdesk.
  • Drop-in help center. Pilot is a free 14-day trial.

FAQs

What is the best method to export a Zendesk Help Center?
The Help Center API is the best method for full fidelity. It returns articles, sections, categories, and metadata in structured JSON. Manual CSV is fine for a quick audit. Third-party tools are best when you have a known destination and no engineering bandwidth.
What gets lost when you export a Zendesk Help Center?
Search synonyms, article view counts, user-segment definitions behind permissions, version history, theme code (on plans below Professional), URL aliases, and end-user subscriptions. The API returns article bodies and structure. The rest needs separate exports or rebuilds.
How long does the Help Center API export take?
A 1,000-article help center takes about two to three minutes on the Growth plan, excluding attachments. Team plan takes twice as long. Attachments add time based on file size and image volume. A 5,000-article export on Enterprise typically finishes inside 30 minutes.
Is there a built-in export button in Zendesk Guide?
No. Zendesk explicitly states the platform has no prebuilt export tool. The official recommendation is the Help Center API. The Guide UI content filter is only useful as a manual audit, not as a bulk download.
Can I export a Zendesk Help Center without admin access?
You need an admin role to generate an API token. Agent accounts can call the API for public articles with their own credentials but cannot access restricted content. If you do not have admin access, have an admin generate the token or run the export and hand off the dump.
Zendesk does not give you a one-click export button. The Help Center API will give you everything that matters, if you know which endpoints to call and what gets dropped along the way.
Henrik Roth, Co-Founder HappySupport
Table of contents

    Henrik Roth

    Co-Founder & CMO of HappySupport

    Henrik scaled neuroflash from early PLG experiments to 500k+ monthly visitors and €3.5M ARR, then repositioned the product to become Germany's #1 rated software on OMR Reviews 2024. Before SaaS, he built BeWooden from zero to seven-figure e-commerce revenue. At HappySupport, he and co-founder Niklas Gysinn are solving the problem he saw at every company: documentation that goes stale the moment developers ship new code.

    Schedule a demo with Henrik