Teachable - Course Purchase Tracking

Track every course sale in real time with Teachable’s purchase analytics to boost revenue insights and student engagement.

Ceyhun Enki Aksan
Ceyhun Enki Aksan Entrepreneur, Maker

Online education platforms where we can create unlimited courses, enjoy unlimited video streaming, access unlimited hosting space, benefit from integrated payment methods, and stand out with basic quizzes—making it one of the most popular and widely used options—Teachable, formerly known as Fedora, is one of the platforms offering online course publishing capabilities since 20131 2. Particularly, based on 2018 data, course creators who teach through the platform earned over $1 million in revenue, with two of them surpassing $4 million3.

Teachable provides theme customization capabilities exclusively within the Business membership tier, with the Basic, Pro, and Business membership packages. During the theme customization process, numerous operations can be easily performed using liquid templating4.

Teachable
Teachable

Alongside the signup process, you’ll first need to define a school (optional). After this step, you can proceed to access your management dashboard by answering a few additional questions. Teachable uses the Course and Coaching product definitions. Coaching operates under a separate management structure. At the relevant stage, you can create custom request forms either directly or through a form, for individual tutoring requests. Both Coaching and Course offer free, one-time payment, subscription, and payment plan options. Additionally, a Calendly integration is available for Coaching. Furthermore, page customization is possible for both products using a page builder tool5.

Before you can select a course, you’ll first need to create a curriculum. Once you’ve set up the sections, you’ll be able to view the course content.

Teachable also provides the ability to define permissions for instructors and authors, differentiating itself from many other alternatives.

Integrations and Analytics

Under Settings > Integrations, you can easily set up many operations through the available integration options. Among the pre-built integration options are Facebook Pixel, Convert Kit, Segment, Google Analytics, Sumo, MailChimp, and Zapier 6.

Teachable Code Snippet
Teachable Code Snippet

Site > Using the Code Snippet feature, you can access the Head Code Snippets, Logged In Snippets, and Logged Out Snippets sections, where you can utilize customized CSS, HTML, and JavaScript code 7. Additionally, using the Power Editor under the Site section, you can customize theme-specific lectures, courses, pages, blog, author_bios, and layouts using the Liquid template language 8 9 10 11 12.

Teachable Liquid
Teachable Liquid
{% for lecture_section in course.ordered_published_lecture_sections %}
  {{ lecture_section.name }}
{% endfor %}

Remember that objects differ based on the page they’re displayed on 13. As of the date this article was published, the following list is current:

---
Attachment: # Attachments are videos, pdfs, audio files, quizzes, and text attachments to lectures
- content_type # the content type for the attachment, such as 'audio_type'
- url # Link to download the file
- host_id # Id of video on wistia
- kind # the kind of attachment, example - 'video', 'text'
- file_extension # the file extension, example - 'pdf_embed', 'html'
- name # the name of the attachment file
- host # the host for the attachment, example - 'wistia'
- position # the position of the attachment in the lecture view
- is_published # whether or not the attachment is published
- downloadable # is this attachment embeddable
- text # the text content of the attachment if the attachment is of type 'text'
- thumbnail_url # the url to the thumbnail for the attachment's file if there is one
- embeddable # whether or not attachment is embeddable
- id # the id of the attachment in the database
AuthorBio:
- headline # the author's headline
- profile_image_url # the author's profile image url
- bio # the author's bio description text
- name # the author's name
- id # the id of the author bio in the database
Category:
- name # the category name
- description # the category description
- is_published # whether or not the category is published
- id # the id of the category in our database
Comment:
- gravatar_url # the gravatar_url for the comment's creator
- user_id # the id of the comment's creator
- body # the text content of the comment
- workflow_state # the workflow_state of the comment, example - 'approved', 'removed', 'rejected', 'awaiting_review'
- id # the id of the comment in the database
Coupon:
- formatted_discount # the discount amount with currency formatting
- formatted_price # the price amount with currency formatting
- calculated_discount # the calculated discount amount
- calculated_price # the calculated price amount
- currency # the currency for the coupon
- discount_percent # the discount amount percentage
  • discount_amount # the discount amount
  • number_available # the number of available uses for the coupon
  • code # the code for the coupon
  • name # the coupon’s name
  • expiration_date # the coupon’s expiration date
  • product_id # the id of the product that the coupon is applicable for
  • is_published # whether or not a coupon is published
  • duration_kind # the kind of duration for a coupon, example - ‘forever’, ‘once’
  • number_of_uses # the number of times a coupon has been used
  • id # the id for the coupon in the database

Block:

  • liquid_path # the path for the liquid partial used by the block
  • partial # the name of the liquid partial used by the block
  • position # the position of the block when rendered in a page
  • body # the block’s body content
  • data # the data attributes for a block, example - body
  • id # the id for the block in the database

CourseQuestion:

  • question # the question for the course_question
  • answer # the answer for the question
  • course_id # the id of the course that the course_question belongs to
  • position # the position number of the course_question when rendered on a page
  • id # the id for the course_question in our database

Course:

  • url # the full url for the course

  • path # the relative path for the course

  • safe_image_url # the url for the course’s safe image

  • default_product_formatted_price # the course’s default product’s formatted price

  • promo_video # the promo video attachment object for this course

  • name # the course’s name

  • heading # the course’s heading text

  • page_title # the course’s page title in the meta tags

  • meta_description # the course’s description in the meta tags

  • friendly_url # the course’s friendly url

  • description # the course’s description

  • author_bio_id # the course’s author’s bio id

  • position # the position of the course when rendered in the courses directory

  • conversion_pixels # the snippet for the course’s thank you page

  • closing_letter # the text content for the course’s closing letter block on the sales page

  • image_url # the url for the image for this course

  • hero_image_url # the url for the course’s hero image

  • is_published # whether or not the course is published

  • bundled_courses_count # the number of courses that are bundled with this course

  • is_open # whether the course is open for enrollments or not

  • purchase_redirect_url # optional url that can be set for redirecting to after purchasing instead of using thank you page

  • default_product # the default product/pricing displayed for this course

  • id # the id for this course in the database

  • course_questions # the course_question objects for this course

  • has_products? # whether or not a course has products/pricing available

  • user_enrolled? # whether or not the current user is enrolled in this course

  • video # the snippet for the course’s promo video

  • lecture_sections # the lecture sections for this course

  • percent_complete_for_user # the percentage of the course that the current user has completed

Credential:

  • id # the id for the credential in the database

CustomLink:

  • position # the position of the custom link in the nav
  • location # the location of the link, example - ‘header’, ‘footer’
  • text # the displayed text for the link
  • url # the url for the link
  • id # the id for the custom link in the database

Domain:

  • url # the url for the domain
  • id # the id for the domain in the database

Integration:

  • disqus_id # the disqus id
  • id # the id for the integration in the database

LectureProgress:

  • id # the id for the lecture progress in the database

LectureSection:

  • name # the name of the lecture section

  • course_id # the id of the course that the lecture section belongs to

  • position # the position of the lecture section when rendered in the curriculum

  • is_published # whether or not a lecture section is published

  • lectures # the published lecture objects that belong to this lecture section

  • id # the id for the lecture section in the database
    Lecture:

  • url # the url for the lecture

  • name # the lecture’s name

  • download # whether or not a lecture is downloadable

  • free_preview # whether or not there is free previewing available for the lecture

  • description # the lecture’s description

  • course_id # the id of the course that the lecture belongs to

  • position # the position of the lecture when rendered in a lecture section/curriculum

  • is_published # whether or not the lecture is published

  • lecture_section_id # the id of the lecture section that the lecture belongs to

  • id # the id of the lecture in the database
    Product:

  • formatted_price # the product’s price with currency formatting

  • name # the product’s name

  • description # the product’s description

  • billing_interval # the billing interval at which the product charges, example - ‘monthly’

  • currency # the currency for the price of the product

  • position # the position of the product when rendered on a sales page

  • price # the price amount for the product

  • cc_statement_description # the text that appears on the cc statement for the purchase of this product

  • is_recurring # whether or not a product charges on a recurring basis

  • is_published # whether or not a product is published

  • course_id # the id of the course which the product belongs to

  • num_payments_required # the number of payments required for the product if applicable

  • id # the id of the product in the database
    Sale:

  • product_id # the id of the product that the sale pertains to

  • user_id # the user id of the purchaser

  • is_active # whether or not a sale is active

  • current_period_start # the sale’s billing start period

  • current_period_end # the sale’s billing end period of the sale

  • is_recurring # whether or not a sale is recurring

  • next_period_start # when the next billing cycle begins

  • num_payments_required # the number of required payments remaining to be made on a sale

  • id # the id of the sale in the database
    Page:

  • title # the page’s title

  • friendly_url # the page’s friendly URL

  • content # the content for the page (NO LONGER IN USE, content is now kept in the blocks)

  • show_header # whether or not the page should display the header

  • show_footer # whether or not the page should display the footer

  • is_published # whether or not the page is published

  • blank_page_template # whether or not the page should use no template

  • published_at # when the page was published

  • is_blog_post # whether or not a page is a blog post

  • author_bio_id # the id of the author bio that the page belongs to

  • is_disqus_enabled # whether or not comments are enabled on the page

  • id # the id of the page in the database

School:

  • domain # the domain for the school

  • primary_domain_url # the URL for the school’s primary domain

  • purchasing_blocked? # whether or not purchasing is blocked on a school

  • name # the school’s name

  • heading # the school’s heading text

  • description # the school’s description text

  • facebook_username # the school’s Facebook username

  • twitter_username # the school’s Twitter username

  • homepage_id # the school’s homepage page id

  • google_plus_username # the school’s Google+ username

  • logged_out_homepage_template # the name of the school’s template to render for logged out users

  • primary_domain_id # the id of the school’s primary domain

  • logged_in_homepage_template # the name of the school’s template to render for logged in users

  • course_id # the id for the course that the school renders if it has a course sales page set as its homepage

  • email # the email for the school

  • email_from_name # the name from which the school emails

  • is_customized # whether or not a school has customizations

  • down_for_maintenance # whether or not a school is down for maintenance

  • is_blog_enabled # whether or not the school has enabled the blog feature

  • blog_title # the school’s blog title

  • blog_description # the school’s blog description

  • blog_about # the school’s blog about text

  • comments_threaded # whether or not a school displays comments in a threaded structure

  • comments_moderation # whether or not the school has comment moderation enabled

  • id # the id for the school in the database

User:

  • role # the role of the user, example - ‘owner’, ‘author’
  • gravatar_url # the gravatar url for the user
  • email # the user’s email
  • affiliate_code # the user’s affiliate code
  • name # the user’s name
  • is_owner # whether or not the user is an owner of the school
  • sign_in_count # the number of sign ins for the user
  • is_author # whether or not the user is an author of the school
  • last_four # the last four numbers on the user’s credit card if they have one saved
  • author_bio_id # the user’s author bio object id if they have one associated with them
  • preference # the user’s preferences
  • id # the id for the user in the database

<ResponsiveImage
  src="teachable-power-editor"
  alt="Teachable Power Editor"
  uri="11.teachable-checkout-tracking"
/>

Unless otherwise specified, after a user enrolls in a Teachable course (subscription, purchase, etc.), they are redirected to the _Post Purchase Page_[^7]. The relevant configuration can be performed under _Courses_ > _Information_ > ***Default Pages***. The resulting URL and parameters can be exemplified as follows:

```html
https://<subdomain>.teachable.com/p/<course-name>-purchased?coupon=<coupon>&csidebar=false&currency=<currency>&final_price=<final-price>&is_recurring=false&payment_method=<payment-method>&purchased=<transaction-id>&purchased_at=<transaction-date>&purchased_course_id=<course-id>&purchased_list_price=<listing-price>&sale_id=<sale-id>&tax_charge=0&user_id=<user-id>
Teachable Thank You Page
Teachable Thank You Page

Unlike other alternative education/course platforms, Teachable requires users to select a membership plan for course distribution.

Teachable - Fedora
Teachable - Fedora

Teachable still uses fedora as a default value in certain areas (fedora_user, fedoraAnalytics, fedora_keys). For example, during the integration process with Google Analytics and Google Tag Manager, you can list user values as fedora_user in JavaScript objects.

Footnotes

  1. Teachable Usage Statistics
  2. Learning Management Systems. eLearning Industry
  3. Morgan Timm. (2019). Here’s What to Expect from Teachable this Year…
  4. teachable_liquid_email_template.liquid. GitHub
  5. Becky Lushey. (2020). How To Customise the Design of Your Teachable Course
  6. Google Analytics and Teachable
  7. Code Snippets and Custom CSS
  8. Available with Business and higher-tier plans.
  9. Control flow. Liquid
  10. Liquid / HTML Block. Teachable
  11. Baidhurya Mani. (2018). How to Track Abandoned Checkouts on Teachable
  12. Erin Gibson. (2018). How to redirect your Teachable sales page to another website?
  13. Liquid on Teachable