LoadersZendesk

Zendesk Loader

The Zendesk loader pulls support ticket, user, and organization data from your Zendesk Support instance into your data warehouse. It uses Zendesk’s Incremental Exports API for efficient, cursor-based data extraction.

Prerequisites

  • A Zendesk Support account (Team, Professional, or Enterprise plan)
  • A Zendesk user with Admin or Agent role
  • A connected Warehouse (target warehouse) with write permissions on the target schema

Authentication

The Zendesk loader uses API Token authentication.

Obtaining an API Token

  1. Log in to your Zendesk Support admin panel
  2. Navigate to Admin > Channels > API
  3. Enable Token Access if not already enabled
  4. Click Add API Token
  5. Give the token a description (e.g., “SignalSmith Loader”)
  6. Copy the generated token
  7. In SignalSmith, enter the following:
FieldDescriptionExample
SubdomainYour Zendesk subdomainmycompany (from mycompany.zendesk.com)
EmailThe email address of the Zendesk useradmin@mycompany.com
API TokenThe generated API tokenaBcDeFgHiJkLmNoPqRsTuVwXyZ

SignalSmith authenticates using the {email}/token:{api_token} format as specified by Zendesk’s API.

Custom Domain

If your Zendesk instance uses a custom domain (e.g., support.mycompany.com instead of mycompany.zendesk.com), enter the full custom domain in the subdomain field.

Available Objects

ObjectAPI NameDescriptionDefault Sync Mode
TicketsticketsSupport tickets with subject, description, status, and custom fieldsIncremental
UsersusersEnd users, agents, and admins in your Zendesk instanceIncremental
OrganizationsorganizationsCustomer organizations that group usersIncremental
Ticket Commentsticket_commentsIndividual comments/replies on tickets (public and internal)Incremental
Ticket Metricsticket_metricsSLA and performance metrics per ticket (first reply time, resolution time)Incremental
Ticket Fieldsticket_fieldsCustom field definitionsFull Refresh
GroupsgroupsAgent groups for ticket routingFull Refresh
BrandsbrandsBrand/subdomain configurations (multi-brand setups)Full Refresh
TagstagsTag definitions used across tickets, users, and organizationsFull Refresh
Satisfaction Ratingssatisfaction_ratingsCSAT survey responsesIncremental

Ticket Comments

Ticket comments are extracted as a separate table with a foreign key to the parent ticket. This includes both public replies visible to the customer and internal notes visible only to agents. The public field distinguishes between the two.

Custom Fields

Zendesk custom fields on tickets are extracted as additional columns in the tickets table. The column name is derived from the field’s API name (e.g., custom_field_12345). The ticket_fields object provides the human-readable labels for mapping.

Configuration

SettingDescriptionDefault
SubdomainYour Zendesk subdomain or custom domain— (required)
EmailZendesk user email for authentication— (required)
API TokenZendesk API token— (required)
ObjectsList of objects to sync— (you choose during setup)
Sync ModeFull Refresh or Incremental (per object)Incremental
Primary KeyField(s) that uniquely identify a recordid
Target SchemaWarehouse schema for Zendesk tables— (required)
Table PrefixOptional prefix for table nameszd_
ScheduleSync frequencyHourly

Scheduling Notes

  • Incremental Exports API: For tickets, users, and organizations, SignalSmith uses Zendesk’s dedicated Incremental Exports API, which is designed for bulk data extraction. This is more efficient than listing endpoints and provides a reliable cursor for incremental sync.
  • Rate limits: Zendesk enforces rate limits of 400 requests per minute for most endpoints. The Incremental Exports API has a separate limit of 10 requests per minute but returns up to 1,000 records per request. SignalSmith handles these limits with automatic backoff.
  • Cursor persistence: The incremental export cursor is a Unix timestamp. SignalSmith persists this between runs, so each execution picks up records modified after the last successful sync.
  • Deleted tickets: Zendesk’s Incremental Exports API includes soft-deleted tickets. These are marked with status: "deleted" in your warehouse. Permanently deleted tickets are not included.
  • Archived tickets: On Enterprise plans, tickets older than 120 days are archived. Archived tickets are included in the initial backfill but may not appear in incremental exports. Run a periodic full refresh if you need to capture archived ticket updates.

Schema Mapping

Zendesk field types are mapped to warehouse-compatible types:

Zendesk TypeWarehouse TypeNotes
integerBIGINTIDs, numeric custom fields
stringVARCHAR
textTEXT / VARCHARLong text fields like descriptions
booleanBOOLEAN
dateDATE
datetimeTIMESTAMPUTC normalized from ISO 8601
arrayJSON / VARCHARTags, collaborator IDs
objectJSON / VARCHARNested structures like via, satisfaction_rating
taggerVARCHARCustom dropdown fields

Troubleshooting

IssueSolution
”401 Couldn’t authenticate you”Verify the email, API token, and subdomain are correct. Ensure the email includes /token format is handled by SignalSmith
”403 Forbidden”The authenticated user may lack permission to access the requested resource. Use an Admin account
”429 Too Many Requests”SignalSmith handles rate limits automatically. If this persists, reduce the number of objects or sync frequency
Missing custom fields on ticketsCustom fields appear as custom_field_{id} columns. Join with the ticket_fields table to get human-readable names
Ticket comments not appearingTicket comments are a separate object. Ensure you’ve selected “Ticket Comments” in addition to “Tickets”
Old tickets missing after incremental syncArchived tickets may not appear in incremental exports. Schedule a periodic full refresh to capture these
Subdomain not recognizedVerify the subdomain matches your Zendesk URL (e.g., mycompany from mycompany.zendesk.com)

Next Steps

  • Create a model to transform your raw Zendesk data
  • Build customer support dashboards by joining tickets, users, and organizations
  • Combine support data with CRM data for a unified customer view