Requirements

To use TeachMetrics, you need:

  • A Teachable school on the Growth, Advanced, or Unlimited plan
  • Your Teachable API key (we'll show you how to get this)

If you choose the self-hosted option, you also need:

  • A web host running PHP 8.4+ and MySQL 8 — ordinary shared hosting works; no VPS or container platform required
  • HTTPS on your domain (most hosts include this via Let's Encrypt)
  • The ability to run a single cron job (TeachMetrics schedules everything else itself)

Note: TeachMetrics requires API access, which is only available on Teachable's Growth plan and above. The Basic plan does not include API access.

Managed vs Self-Hosted

TeachMetrics is the same application either way — the difference is who runs it:

  • Managed hosting — We install and run TeachMetrics for you on your own yourschool.teachmetrics.co subdomain, with a dedicated database, backups, and updates handled for you. You just connect your Teachable API key.
  • Self-hosted — You download TeachMetrics and install it on your own web host. Your data lives entirely on infrastructure you control, and we never see it.

See pricing for what each option includes.

Installation

Managed hosting: there is nothing to install. After you sign up, we set up your instance and send you your subdomain and login — skip ahead to API Key Setup.

Self-hosted: TeachMetrics installs like classic web software — upload, then a guided web installer does the rest:

Upload the App

Unpack your TeachMetrics download and upload it to your web host, with the app's public/ directory as your site's document root.

Create a MySQL Database

Create an empty MySQL 8 database and a database user in your hosting control panel. Have the credentials handy.

Enter the Setup Token

Visit your domain in a browser. For security — the installer is reachable by anyone until setup finishes — TeachMetrics asks for a one-time setup token so only you can create the admin account. On your first visit it writes the token to storage/install-token.txt; open that file in your hosting file manager (e.g. cPanel → File Manager) or over SSH and paste its contents. It's deleted automatically once install completes.

Run the Install Wizard

The wizard then walks you through the database connection, creating your admin account, and connecting your Teachable API key.

Add the Cron Job

Add the single cron entry the wizard shows you. It drives TeachMetrics' internal scheduler — data syncs, email sending, and maintenance all run from this one job.

API Key Setup

To connect TeachMetrics to your Teachable school, you'll need your API key.

Finding Your API Key

Log into Teachable

Go to your Teachable school admin dashboard.

Navigate to Settings

Click on Settings in the left sidebar, then select API Keys.

Copy Your API Key

If you don't have an API key, click "Generate API Key". Copy the key to your clipboard.

Enter in TeachMetrics

Log into your TeachMetrics dashboard, go to Settings, and paste your API key. TeachMetrics tests the connection live before saving.

Keep your API key secure! Your API key provides access to your school data. Never share it publicly. TeachMetrics encrypts your key at rest with AES-256-GCM, and you can rotate it from Settings at any time.

First Sync

After connecting your API key, TeachMetrics syncs your school's history. Small schools finish in minutes; schools with years of history and thousands of students can take an hour or more — the sync runs in the background and you can watch its progress from the dashboard.

During the sync, TeachMetrics fetches:

  • All courses and their details
  • Student enrollments and progress
  • Transaction history and revenue data
  • Pricing plans and coupons

Your data, your server: everything TeachMetrics stores lives in the app's own MySQL database — on your web host if you self-host, or in your dedicated managed database. After the first sync, the scheduler and Teachable webhooks keep it current automatically.

Dashboard

The dashboard gives you an at-a-glance view of your school's performance:

  • Revenue Overview - Total revenue, monthly trends, and growth rates
  • Student Metrics - Active students, new enrollments, completion rates
  • Course Performance - Top-performing courses by revenue and engagement
  • Recent Activity - Latest enrollments and transactions

Analytics

Dive deeper into your school's data with our analytics tools:

Revenue Analytics

Track revenue over time, compare periods, and identify trends. See revenue breakdowns by course, pricing plan, and payment type.

Student Analytics

Understand your student base with cohort analysis, engagement metrics, and progress tracking. Identify at-risk students before they drop out.

Course Analytics

See which courses drive the most revenue and engagement. Track completion rates and identify where students get stuck.

Email Campaigns

Because TeachMetrics knows your students and their activity, it can also talk to them:

  • Campaigns - Compose and send email to segments of your students, built with a visual template editor
  • Segments - Target by course, enrollment, engagement, and purchase behavior
  • Automations - Trigger email from school events, like a new enrollment

Email sends through the SMTP provider you configure in Settings, so it comes from your own address.

Storage buckets (S3 / Wasabi)

Two optional features use S3-compatible object storage (Wasabi works great and is what we run): off-site database backups and inline image uploads for the email template editor. One access key serves both, but they need two separate buckets with opposite visibility:

  • Backup bucketprivate. Encrypted database dumps land here nightly, rotated automatically (14 daily / 8 weekly / 12 monthly / 10 manual kept).
  • Images bucketpublic-read. Images you drop into email templates are served from here to your recipients' mail clients. Never reuse the backup bucket for this.

Setup (once, ~10 minutes)

Create an access key

In Wasabi: create a user (e.g. teachmetrics-bot) with programmatic access and note the access key + secret.

Create the two buckets

A private bucket for backups (e.g. myschool-backups) and a second bucket for email images (e.g. myschool-email-images) with public access allowed. Note the region — both buckets and your endpoint (e.g. https://s3.us-east-2.wasabisys.com) must match.

Attach the two policies to the user

Copy these exactly, substituting your bucket names. The backup policy:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "BackupObjectAccess",
      "Effect": "Allow",
      "Action": ["s3:PutObject", "s3:GetObject", "s3:DeleteObject"],
      "Resource": "arn:aws:s3:::myschool-backups/*"
    },
    {
      "Sid": "BackupBucketList",
      "Effect": "Allow",
      "Action": "s3:ListBucket",
      "Resource": "arn:aws:s3:::myschool-backups"
    }
  ]
}

The images policy — note the extra s3:PutObjectAcl: TeachMetrics marks each uploaded image public-read, and without this action uploads fail with Access Denied:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "EmailImagesObjectAccess",
      "Effect": "Allow",
      "Action": ["s3:PutObject", "s3:PutObjectAcl", "s3:GetObject", "s3:DeleteObject"],
      "Resource": "arn:aws:s3:::myschool-email-images/*"
    },
    {
      "Sid": "EmailImagesBucketList",
      "Effect": "Allow",
      "Action": "s3:ListBucket",
      "Resource": "arn:aws:s3:::myschool-email-images"
    }
  ]
}

Enter and test in TeachMetrics

Backups: Settings → Export & Backup — key, secret, endpoint, region, backup bucket → Test connection. Images: Settings → Email → Inline image uploads — just the images bucket name → Test upload, which uploads a tiny image, fetches it anonymously the way a mail client would, and cleans up after itself.

Both tests green? You're done: nightly encrypted backups go off-site with automatic rotation, and the template editor accepts image drag & drop.

AI Insights

Ask questions about your school in plain English — "which courses had the most refunds this quarter?" — and TeachMetrics answers from your own data. Self-hosted operators bring their own AI provider key; managed hosting can include AI as an add-on.

Sandboxed by design: AI queries run against a read-only view of your analytics data, isolated from the rest of the application.

Data Exports

Export your data for use in other tools:

  • CSV Export - Download reports as CSV files for spreadsheets
  • Direct database access - Self-hosted operators own the MySQL database outright and can query or back it up with standard tools

Webhook Setup

TeachMetrics runs on a real server, so it receives Teachable webhooks directly — no relay services or third-party glue. Setup takes a minute:

Get Your Webhook URL

In TeachMetrics, go to Settings to find your installation's unique webhook URL.

Add to Teachable

In your Teachable admin, go to Settings > Webhooks and add your TeachMetrics URL.

Select Events

Enable the events you want to track: enrollments, progress updates, transactions, etc.

How Updates Work

With webhooks registered, your data stays current automatically:

  • Instant updates - Webhook events are applied the moment Teachable sends them
  • Lecture-by-lecture progress - See exactly where students are in your courses
  • Notifications - Get alerts for new enrollments and completions
  • Scheduled reconciliation - The built-in scheduler also re-checks against the Teachable API, so a missed webhook can't leave your numbers stale

Update Check & Telemetry

Once a day, the built-in scheduler asks teachmetrics.co whether a newer version or a security advisory exists. That request carries exactly four small facts — and this table is the complete list (License Agreement §8 commits us to updating this disclosure before the payload ever changes):

FieldExamplePurposeRetention
License IDTM-XXXX-XXXX-XXXXAssociate the install with a purchaseAggregated in place while the license exists; deleted on request
Install IDRandom identifier, generated at install — derived from nothing in your dataDistinguish installations (e.g. staging vs production)Same as above
Version1.0.0Know which versions are in use; tell you when an update or advisory appliesSame as above
TimestampRequest timeLast-seen bookkeepingOnly first-seen/last-seen are kept — there is no per-ping log

Our web server additionally sees ordinary connection metadata (your server's IP address) in standard request logs with routine rotation. The request never includes student records, course data, analytics, database contents, credentials, or anything else about your school.

  • Nothing depends on it. If the request fails or teachmetrics.co is unreachable or blocked, your instance runs exactly as before — there is no kill switch (License Agreement §9a). You only stop hearing about updates.
  • You can turn it off in Settings → Updates & telemetry. The same panel shows precisely what was sent and when, and what came back.
  • What comes back: the latest available version and any published security advisories — shown as a notice on your dashboard. Published advisories always appear at the security advisories page, the designated location referenced by the License Agreement.

Need help? Reach us through the contact page and we'll help you get set up.