Custom CRM Integration

    Plan Availability
    Legacy Plans
    Platform

Custom CRM Integration

Thinkific offers native integrations with popular CRM and marketing tools including HubSpot, Salesforce, ActiveCampaign, and ConvertKit. Discover these in the App Store If you need a more flexible or customized experience, you can build your own integration using Thinkific's API and Webhooks.

This guide walks through how to sync Thinkific data - users, enrollments, and purchases - into any CRM in real time.


How it works

A CRM integration with Thinkific typically combines two approaches:

  • Webhooks for real-time event-driven updates (e.g., a new user signs up, a purchase is made)
  • API queries for fetching current state or backfilling historical data

Together, these let you keep your CRM in sync without polling continuously.


Step 1: Subscribe to webhooks

Webhooks push data to your system the moment something happens on your Thinkific site. For a CRM integration, the following webhook topics are most relevant:

User events

Topic When it fires
user.created A new user registers on your site
user.updated A user's profile is updated (name, email, custom fields)

Use these to create or update contact records in your CRM as soon as a user appears in Thinkific.

Enrollment events

Topic When it fires
enrollment.created A user is enrolled in a course or bundle
enrollment.updated An enrollment's status changes (e.g., expired, activated)
enrollment.completed A user completes a course

Use these to track which products a contact has accessed, update lifecycle stages, and trigger follow-up sequences in your CRM.

Purchase events

Topic When it fires
order.created A new order is placed on your site

Use this to log purchase activity against a contact record, update revenue fields, or trigger post-purchase automations.

Registering a webhook

Use the Webhooks API to register your endpoint programmatically, or configure webhooks directly in your Thinkific admin settings.

Your endpoint should respond with a 200 OK within 5 seconds. Thinkific will retry failed deliveries with exponential backoff.


Step 2: Query the API for current state

Webhooks cover new activity, but you'll also need to fetch existing data - for example, when first setting up your integration or backfilling historical records.

GraphQL API (recommended)

Thinkific's GraphQL API is the recommended approach for new integrations. It gives you precise control over what data you fetch and reduces over-fetching.

Base URL: https://api.thinkific.com/stable/graphql

Fetch a user with their enrollments:

 
graphql
query GetUser($userId: ID!) {
  user(id: $userId) {
    id
    email
    firstName
    lastName
    createdAt
    enrollments {
      edges {
        node {
          id
          activatedAt
          expiresAt
          percentCompleted
          product {
            id
            name
          }
        }
      }
    }
  }
}

List users (paginated):

 
graphql
query ListUsers($cursor: String) {
  users(first: 50, after: $cursor) {
    edges {
      node {
        id
        email
        firstName
        lastName
        createdAt
      }
    }
    pageInfo {
      hasNextPage
      endCursor
    }
  }
}

Use the pageInfo.endCursor value as the cursor argument on subsequent requests to paginate through all users.

Explore the full schema and test queries using Apollo Explorer.

REST API

The REST API covers the same core resources and is useful for simpler use cases or existing integrations.

Base URL: https://api.thinkific.com/api/public/v1

Resource Endpoint Description
Users GET /users List all users on your site
User GET /users/{id} Get a specific user by ID
Enrollments GET /enrollments List all enrollments
Enrollment GET /enrollments/{id} Get a specific enrollment
Products GET /products List all products (courses and bundles)

Example: List users

 
bash
curl https://api.thinkific.com/api/public/v1/users \
  -H "Authorization: Bearer {access_token}" \
  -H "X-Auth-Subdomain: {your-subdomain}"

Results are paginated. Use the page and limit query parameters to navigate through large result sets.

Full endpoint reference: REST Admin API Reference


Step 3: Map Thinkific data to your CRM

Here is a suggested mapping for common CRM fields:

Thinkific field CRM field
user.email Contact email
user.firstName + user.lastName Contact name
user.createdAt Lead created date
enrollment.product.name Product / course interest
enrollment.activatedAt Enrollment date
enrollment.percentCompleted Course progress
enrollment.completed (webhook) Course completion date
order.created (webhook) Purchase date / revenue

Authorization

Both the GraphQL and REST APIs require an access token. Thinkific supports two authorization methods:

  • API Access Token - for private integrations you build and run yourself
  • OAuth 2.0 - for apps you intend to distribute or list on the Thinkific App Store

See the Authorization docs for setup instructions.

Note: API Key authorization is not supported for GraphQL. Use API Access Token or OAuth.


Next steps

Was this article helpful?
0 out of 0 found this helpful