Teachable Course Scraper
Pricing
$19.99/month + usage
Teachable Course Scraper
Scrape courses from any Teachable school. Extract titles, prices, students, reviews, instructor profiles, curriculum, sales pages and testimonials. Works with any Teachable-powered site including custom domains.
Pricing
$19.99/month + usage
Rating
0.0
(0)
Developer

SilentFlow
Actor stats
1
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
by SilentFlow
Extract comprehensive course data from any Teachable-powered school. Get titles, prices, student counts, reviews, instructor profiles, curriculum, sales pages, and descriptions.
Why use this scraper?
- Universal: Works with any Teachable school - custom domains or teachable.com subdomains
- Comprehensive data: 30+ data points per course including pricing, reviews, curriculum
- Instructor profiles: Extract instructor names, bios, avatars, and credentials
- Sales page extraction: Full marketing copy, testimonials, and page structure
- Curriculum details: Complete course outline with sections, lectures, and durations
Use cases
| Industry | Application |
|---|---|
| Market research | Analyze online course market trends and pricing |
| Competitive intelligence | Monitor competitor course offerings and prices |
| Content aggregation | Build course comparison or discovery platforms |
| Academic research | Study online education patterns and growth |
| Lead generation | Identify course creators for partnerships |
| Price monitoring | Track pricing changes across Teachable schools |
Input parameters
URLs
| Parameter | Type | Description |
|---|---|---|
schoolUrls | array | Teachable school URLs to scrape all courses from |
courseUrls | array | Direct course page URLs for specific courses |
Options
| Parameter | Type | Default | Description |
|---|---|---|---|
scrapeDetails | boolean | true | Visit each course page for full data (slower but complete) |
scrapeSalesPage | boolean | false | Extract full sales page content |
maxItems | integer | 100 | Maximum courses to return (max: 5000) |
maxConcurrency | integer | 5 | Parallel page requests |
maxRequestRetries | integer | 5 | Retries per failed request |
requestTimeoutSecs | integer | 30 | Page load timeout in seconds |
proxyType | string | residential | Proxy type: residential, datacenter, auto |
Output data
Each course record contains:
{"id": "12345","title": "Complete Python Masterclass","slug": "complete-python-masterclass","url": "https://school.teachable.com/p/complete-python-masterclass","description": "Learn Python from scratch with hands-on projects...","shortDescription": "Master Python programming in 30 days","price": 197.00,"originalPrice": 497.00,"currency": "USD","isFree": false,"studentsCount": 12450,"reviewsCount": 342,"averageRating": 4.8,"lessonsCount": 156,"category": "Programming","instructorName": "John Smith","instructorBio": "Senior Python developer with 15 years of experience...","instructorAvatar": "https://...","thumbnail": "https://...","promoVideo": "https://...","curriculum": [{"title": "Getting Started","position": 1,"lectures": [{"title": "Welcome to the Course","type": "video","duration": "5:30","isFree": true}]}],"testimonials": [{"author": "Jane Doe","content": "This course completely changed my career...","rating": 5.0}],"schoolName": "Python Academy","schoolUrl": "https://school.teachable.com","scrapedAt": "2024-06-01T12:00:00Z"}
Field descriptions
| Field | Description |
|---|---|
id | Unique course identifier on Teachable |
slug | URL-friendly course identifier |
price | Current course price |
originalPrice | Price before any discounts |
isFree | Whether the course is free |
studentsCount | Number of enrolled students |
reviewsCount | Number of reviews/testimonials |
averageRating | Average rating (0-5 scale) |
lessonsCount | Total number of lessons/lectures |
curriculum | Full course outline with sections and lectures |
salesPageContent | Full sales page text (when scrapeSalesPage=true) |
testimonials | Student reviews and testimonials |
Examples
Scrape all courses from a school
{"schoolUrls": [{ "url": "https://myschool.teachable.com" }],"scrapeDetails": true,"maxItems": 50}
Scrape specific courses
{"courseUrls": [{ "url": "https://school.teachable.com/p/python-course" },{ "url": "https://school.teachable.com/p/javascript-course" }],"scrapeDetails": true,"scrapeSalesPage": true}
Quick overview (no details)
{"schoolUrls": [{ "url": "https://school.teachable.com" }],"scrapeDetails": false,"maxItems": 200}
Multiple schools
{"schoolUrls": [{ "url": "https://school1.teachable.com" },{ "url": "https://school2.teachable.com" },{ "url": "https://www.customdomain.com" }],"scrapeDetails": true,"maxItems": 500}
Integrations
Python
from apify_client import ApifyClientclient = ApifyClient("YOUR_API_TOKEN")run = client.actor("silentflow/teachable-scraper").call(run_input={"schoolUrls": [{"url": "https://school.teachable.com"}],"scrapeDetails": True,"maxItems": 50})for course in client.dataset(run["defaultDatasetId"]).iterate_items():print(f"{course['title']}: ${course['price']} ({course['studentsCount']} students)")
JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });const run = await client.actor('silentflow/teachable-scraper').call({schoolUrls: [{ url: 'https://school.teachable.com' }],scrapeDetails: true,maxItems: 50});const { items } = await client.dataset(run.defaultDatasetId).listItems();items.forEach(course => console.log(`${course.title}: $${course.price}`));
Performance & limits
| Metric | Value |
|---|---|
| Courses per school | Unlimited |
| Average speed (without details) | ~10 courses/second |
| Average speed (with details) | ~1-2 courses/second |
| Max items per run | 5,000 |
| Supported schools | Any Teachable site |
Tips for best results
- Start small: Test with
maxItems: 5before large scrapes - Details add time: Set
scrapeDetails: falsefor a quick overview, then enable for full data - Custom domains work: Just use the full URL (e.g.,
https://www.mycourses.com) - Sales page content: Only enable
scrapeSalesPageif you need marketing copy analysis
FAQ
Q: How do I find a Teachable school's URL?
A: Look for domains ending in .teachable.com or visit the school directly. Many schools use custom domains - you can use those too.
Q: Can I scrape enrolled course content? A: No, this scraper only extracts publicly available data from sales/landing pages. It does not access gated content.
Q: What if a school has many courses?
A: Use maxItems to control how many courses to extract. The scraper handles pagination automatically.
Q: Are all Teachable themes supported? A: Yes, the scraper handles different Teachable themes and layouts.
Q: How often should I scrape? A: Course data doesn't change frequently. Weekly or monthly scrapes are usually sufficient.
Q: What happens if a school doesn't list courses publicly? A: The scraper will return an empty dataset. Some schools hide their course listing page.
Support
Need help? We're here for you:
- Feature requests: Let us know what you need
- Custom solutions: Contact us for enterprise integrations or high-volume needs
Check out our other scrapers: SilentFlow on Apify