Zendesk to Redshift

This page provides you with instructions on how to extract data from Zendesk and load it into Redshift. (If this manual process sounds onerous, check out Stitch, which can do all the heavy lifting for you in just a few clicks.)

What is Zendesk?

Zendesk is an online customer service and support ticketing (help desk) system.

Getting data out of Zendesk

You can extract data from Zendesk's servers using the Zendesk REST API, which exposes data about tickets, agents, clients, groups, and more. To get data on a ticket, for example, you could call GET /api/v2/tickets.json.

Sample Zendesk data

The Zendesk API returns JSON-formatted data. Here's an example of the kind of response you might see when querying for the details of a ticket.

{
  "id":               35436,
  "url":              "https://company.zendesk.com/api/v2/tickets/35436.json",
  "external_id":      "ahg35h3jh",
  "created_at":       "2017-07-20T22:55:29Z",
  "updated_at":       "2017-08-05T10:38:52Z",
  "type":             "incident",
  "subject":          "Help, my printer is on fire!",
  "raw_subject":      "{{dc.printer_on_fire}}",
  "description":      "The fire is very colorful.",
  "priority":         "high",
  "status":           "open",
  "recipient":        "support@company.com",
  "requester_id":     20978392,
  "submitter_id":     76872,
  "assignee_id":      235323,
  "organization_id":  509974,
  "group_id":         98738,
  "collaborator_ids": [35334, 234],
  "forum_topic_id":   72648221,
  "problem_id":       9873764,
  "has_incidents":    false,
  "due_at":           null,
  "tags":             ["enterprise", "other_tag"],
  "via": {
    "channel": "web"
  },
  "custom_fields": [
    {
      "id":    27642,
      "value": "745"
    },
    {
      "id":    27648,
      "value": "yes"
    }
  ],
  "satisfaction_rating": {
    "id": 1234,
    "score": "good",
    "comment": "Great support!"
  },
  "sharing_agreement_ids": [84432]
}

Loading data into Redshift

When you've identified all the columns you want to insert, use the Reshift CREATE TABLE statement to make a table in your data warehouse to receive the data.

Now you can replicate your data. It may seem as if the easiest way to do that (especially if there isn't much of it) is to build INSERT statements and add data to your table row by row. If you have any experience with SQL, this probably will be your first inclination. But beware! Redshift isn't optimized for inserting data one row at a time. If you have a high volume of data to be inserted, you should instead load the data into Amazon S3 and then use the Redshift COPY command to import it into Redshift.

Keeping Zendesk up to date

You've built a script that pulls data from Zendesk and loads it into your destination database, but what happens tomorrow when you have dozens of new tickets and related data?

The key is to build your script in such a way that it can identify incremental updates to your data. Thankfully, Zendesk's API returns updated_at fields that allow you to identify new records. Once you've taken new data into account, you can set up your script as a cron job or continuous loop to keep pulling down new data as it appears.

Other data warehouse options

Redshift is great, but sometimes you need to optimize for different things when you're choosing a data warehouse. Some folks choose to go with Google BigQuery, PostgreSQL, or Snowflake, which are RDBMSes that use similar SQL syntax, or Panoply, which works with Redshift instances. If you're interested in seeing the relevant steps for loading data into one of these platforms, check out To BigQuery, To Postgres, To Snowflake, and To Panoply.

Easier and faster alternatives

If all this sounds a bit overwhelming, don’t be alarmed. If you have all the skills necessary to go through this process, chances are building and maintaining a script like this isn’t a very high-leverage use of your time.

Thankfully, products like Stitch were built to solve this problem automatically. With just a few clicks, Stitch starts extracting your Zendesk data via the API, structuring it in a way that is optimized for analysis, and inserting that data into your Redshift data warehouse.