Skip to main content
RapidDev - Software Development Agency
bubble-integrationsBubble API Connector

Skillshare

Connect Bubble to Skillshare through Skillshare's affiliate program — the only accessible path for most Bubble developers, since Skillshare has no self-service public API. After affiliate approval, configure the affiliate token as a Private header in Bubble's API Connector. Without API access, build a database-backed analytics dashboard by importing Skillshare's CSV analytics exports into a Bubble Data Type using Bubble's CSV Import tool. Skillshare pays per minute watched, not per sale — always display `minutes_watched` as the primary revenue metric.

What you'll learn

  • Why Skillshare has no self-service public API and what the two available integration paths are
  • How to apply to Skillshare's affiliate program and what to expect after approval
  • How to configure the Bubble API Connector with a Private affiliate token header after approval
  • How to build a database-backed Skillshare analytics dashboard using CSV Import in Bubble
  • Why `minutes_watched` — not enrollment count — is the primary revenue metric for Skillshare instructors
  • How to build an affiliate link click-tracking workflow in Bubble before redirecting to Skillshare
  • How to display earnings trends from stored monthly CSV import data using Bubble's chart capabilities
Book a free consultation
4.9Clutch rating
600+Happy partners
17+Countries served
190+Team members
Intermediate23 min read2–4 hoursEducationLast updated July 2026RapidDev Engineering Team
TL;DR

Connect Bubble to Skillshare through Skillshare's affiliate program — the only accessible path for most Bubble developers, since Skillshare has no self-service public API. After affiliate approval, configure the affiliate token as a Private header in Bubble's API Connector. Without API access, build a database-backed analytics dashboard by importing Skillshare's CSV analytics exports into a Bubble Data Type using Bubble's CSV Import tool. Skillshare pays per minute watched, not per sale — always display `minutes_watched` as the primary revenue metric.

Quick facts about this guide
FactValue
ToolSkillshare
CategoryEducation
MethodBubble API Connector
DifficultyIntermediate
Time required2–4 hours
Last updatedJuly 2026

Bubble + Skillshare: an affiliate storefront or instructor analytics dashboard without a public API

Skillshare's position in the online learning market is unique: it is a subscription-based creative marketplace where instructors are not paid per course sold but instead earn royalties based on how many minutes Premium members spend watching their content. This royalty model means that a course with 500 enrolled students who each watch only two minutes generates far less revenue than a course with 100 students who watch the full two hours. For Bubble-built instructor dashboards, this is the most important business rule to get right — displaying enrollment count as the headline metric creates a misleading picture of revenue health.

The second thing to understand about Skillshare is the API access story. Unlike Podia, Teachable, or LearnWorlds, Skillshare does not offer a self-service API key that any account holder can generate. There are two paths to programmatic Skillshare data: the affiliate program (free to join, designed for creators and marketers who want to promote Skillshare classes and earn commissions on new subscriptions) and the Skillshare for Business partner API (designed for organizations running team learning programs, requiring a formal partnership agreement). Neither path gives you an API key the same day you decide to build.

For Bubble developers, this creates a practical split:

**Path 1 — Affiliate API:** Apply to the Skillshare affiliate program at skillshare.com/affiliates. After approval (typically within a few days), you receive affiliate credentials and access to Skillshare's affiliate API, which provides class metadata and the ability to generate affiliate-tagged referral links. In Bubble, set up the affiliate token as a Private header in the API Connector and build a class discovery or content hub that links visitors to Skillshare with your affiliate tracking ID embedded. This generates commission revenue when a visitor starts a Skillshare Premium subscription through your link.

**Path 2 — CSV Import Analytics:** Available immediately without any API approval. Export your Skillshare instructor analytics from the analytics dashboard as a CSV file. Import the CSV into a Bubble Data Type using Bubble's native CSV Import tool. Build your revenue dashboard, minutes-watched trend charts, and class performance views on top of Bubble's own database. This approach is manual (export and re-import monthly) but fully functional and produces accurate analytics without waiting for API access.

For instructors who want both a public-facing class discovery hub and a private analytics dashboard, both paths can coexist in the same Bubble app — the affiliate API powers the public storefront, and the CSV import powers the private analytics section.

Integration method

Bubble API Connector

The Bubble API Connector calls Skillshare's affiliate API with a Private affiliate token header (after affiliate program approval), or handles CSV-imported analytics data entirely from Bubble's native database — no separate plugin needed for either approach.

Prerequisites

  • A Skillshare affiliate account (apply at skillshare.com/affiliates) for the affiliate API path — OR a Skillshare for Business team plan and a formal partner API agreement for enrollment data
  • For the CSV import path: a Skillshare instructor account with at least one published class generating analytics data (exports are available from your Skillshare instructor analytics dashboard)
  • A Bubble app (any plan for CSV import and affiliate API display; paid plan required for scheduled Backend Workflows)
  • The free API Connector plugin by Bubble installed (Plugins → Add plugins → search 'API Connector') — needed for the affiliate API path
  • At least one monthly analytics CSV export from Skillshare to use as import data during setup

Step-by-step guide

1

Step 1 — Choose your path and obtain Skillshare access

There is no API key to generate from a Skillshare dashboard the same day you decide to build. Before opening Bubble, identify which integration path applies to your use case. If you are an affiliate marketer or content creator who wants to build a Skillshare class discovery hub that earns referral commissions: go to skillshare.com/affiliates and apply to the Skillshare Affiliate Program. The application asks for your website, audience size, and how you plan to promote Skillshare. Approval typically takes a few business days. After approval, log in to the affiliate dashboard — Skillshare's affiliate team will provide the affiliate API endpoint details and the auth token format (this varies by affiliate platform; Skillshare has used platforms like Impact and direct affiliate integrations). If you are a Skillshare for Business team administrator who wants learner analytics: contact Skillshare's enterprise team to discuss partner API access — this requires a formal agreement and is not self-service. If you are a Skillshare instructor who wants personal analytics: start with the CSV import path (Steps 2–4) while waiting for any API access. You can export your analytics CSV from your Skillshare instructor dashboard (Analytics section) immediately. Do not attempt to build a Bubble integration expecting to generate a Skillshare API key from a settings page — that option does not exist.

skillshare-integration-paths.txt
1// Skillshare integration paths — summary
2//
3// PATH 1: Affiliate API
4// Who: Affiliate marketers, content curators
5// Apply: skillshare.com/affiliates
6// What you get: class metadata, referral link generation
7// Timeline: a few business days for approval
8// Revenue: commission on new Premium subscriptions via your links
9//
10// PATH 2: Skillshare for Business Partner API
11// Who: Enterprise L&D teams with team plans
12// Apply: Contact Skillshare enterprise sales
13// What you get: enrollment and learner completion data
14// Timeline: weeks (formal partnership agreement required)
15//
16// PATH 3: CSV Import (available immediately)
17// Who: Skillshare instructors wanting analytics dashboards
18// What you get: historical analytics from export files
19// Timeline: available now — export from instructor analytics
20// Limitation: manual monthly process, not real-time
21//
22// KEY METRIC: minutes_watched (not enrollment_count)
23// Skillshare pays per minute watched by Premium members
24// enrollment_count alone is misleading for revenue analysis

Pro tip: Start building the CSV import path immediately — it gives you a working analytics dashboard right away, and the knowledge you gain about Skillshare's data structure helps you build a better affiliate API integration later when approval arrives. Both paths can coexist in the same Bubble app.

Expected result: You have either received affiliate API credentials from Skillshare after affiliate program approval, or you have downloaded at least one analytics CSV from your Skillshare instructor dashboard. You understand that there is no self-service API key and have set appropriate expectations for the timeline.

2

Step 2 — Set up the SkillshareClass Data Type and import your first CSV

This step implements the CSV import analytics path, which is immediately available for any Skillshare instructor. Open your Bubble app editor. Go to the Data tab → 'Data Types' → click 'New Type.' Name it `SkillshareClass`. Add the following fields: `class_title` (text), `class_id` (text), `category` (text), `minutes_watched` (number), `enrollment_count` (number), `earnings_cents` (number — store in cents, divide by 100 for display), `report_month` (text, format YYYY-MM), and `import_batch` (text — use the import date to track which export file each row came from). Now go to Data tab → 'CSV Import.' Click 'Upload CSV file' and select your Skillshare analytics export. Bubble displays the CSV columns and asks you to map each column to a SkillshareClass field. Skillshare analytics CSV headers may vary — check your actual export headers and map accordingly. Common Skillshare column names: 'Class Title' → `class_title`, 'Minutes Watched' → `minutes_watched`, 'Enrollments' → `enrollment_count`. If earnings are present in the CSV, verify whether the value is in dollars (e.g., 49.00) or cents (e.g., 4900) — store in cents for consistency. If the CSV provides dollar amounts, multiply by 100 during import by creating a calculated field, or handle the conversion in all display expressions. After mapping, click 'Import.' Bubble creates one SkillshareClass record per CSV row.

skillshare-data-type-setup.txt
1// Bubble Data Type: SkillshareClass
2// Data tab → Data Types → New Type
3//
4// Fields:
5// class_title (text) — class name from CSV
6// class_id (text) — Skillshare's class identifier
7// category (text) — e.g., 'Design', 'Photography'
8// minutes_watched (number) — total minutes by Premium members
9// enrollment_count (number) — total enrollments
10// earnings_cents (number) — earnings in cents (divide by 100 to display)
11// report_month (text) — 'YYYY-MM' e.g., '2026-06'
12// import_batch (text) — date of import, e.g., '2026-07-01'
13//
14// CSV Import path:
15// Data tab → CSV Import → Upload CSV file
16// Map Skillshare columns to SkillshareClass fields
17//
18// Earnings display expression:
19// Current cell's SkillshareClass's earnings_cents / 100
20// :formatted as $#,##0.00
21//
22// Dashboard headline metric: minutes_watched
23// Revenue correlation: minutes_watched drives earnings, NOT enrollment_count

Pro tip: Skillshare may produce two separate analytics CSV files — one for engagement data (minutes watched, enrollment counts) and one for earnings data. If so, both must be imported and joined on `class_id` for a complete analytics view. Import both CSVs and use Bubble searches filtered by class_id to correlate data between the two in your dashboard.

Expected result: The SkillshareClass Data Type exists in Bubble with all required fields. At least one monthly analytics CSV has been imported successfully, and SkillshareClass records appear in the Data tab → App data view with correct values in each field.

3

Step 3 — Build the earnings trend dashboard

With SkillshareClass records in Bubble's database, build the instructor analytics dashboard page. The headline metrics for a Skillshare instructor are minutes_watched (the primary revenue driver) and earnings (actual payments). Enrollment count is a secondary vanity metric that should not be the primary focus. Add a page named 'Analytics' or 'Dashboard' — make it accessible only to logged-in users (your own account) using Bubble's conditional page redirect (when page is loaded, if current user is not logged in, redirect to login page). On the page, add a Text element for the headline stats: 'Total Minutes Watched This Month: [Search for SkillshareClasses where report_month = current month:sum of minutes_watched].' Add a second Text for 'Estimated Earnings: [Search for SkillshareClasses where report_month = current month:sum of earnings_cents] / 100 formatted as currency.' For the trend chart: use Bubble's built-in Charts plugin or a lightweight third-party chart plugin. Create a line chart where the X axis is `report_month` values from a search of distinct months in your SkillshareClass records, and the Y axis is the sum of earnings_cents / 100 grouped by report_month. Add a Repeating Group below the chart showing all classes sorted by minutes_watched descending — this 'Top Performing Classes' list shows which content drives the most revenue. For each class in the RG, display: `class_title`, `category`, `minutes_watched :formatted as # minutes`, `earnings_cents / 100 :formatted as currency`, and `enrollment_count`. Add a 'Data as of [MAX of import_batch]' text element prominently — users must always know the data is from the last CSV import, not real-time.

skillshare-dashboard-expressions.txt
1// Dashboard page — key Bubble expressions
2//
3// Total minutes watched (current month):
4// Search for SkillshareClasses:filtered where report_month = '2026-06'
5// :sum of minutes_watched
6//
7// Total earnings (current month):
8// Search for SkillshareClasses:filtered where report_month = '2026-06'
9// :sum of earnings_cents / 100
10// :formatted as $#,##0.00
11//
12// Top classes Repeating Group:
13// Type of content: SkillshareClass
14// Data source: Search for SkillshareClasses
15// :filtered where report_month = Dropdown Month's value
16// :sorted by minutes_watched descending
17//
18// 'Data as of' indicator:
19// Search for SkillshareClasses:sorted by import_batch descending
20// :first item's import_batch
21//
22// Earnings trend chart:
23// X axis: list of distinct report_month values
24// Y axis: sum of earnings_cents / 100 per month
25//
26// REMINDER: minutes_watched = revenue driver
27// Never headline enrollment_count as the primary metric

Pro tip: If you import multiple months of CSV data, use a Dropdown filter on the page to let users select which report_month to view, rather than always showing the most recent. This turns your analytics dashboard into a historical comparison tool — one of the most valuable views for Skillshare instructors who want to understand seasonal trends in their content.

Expected result: The Analytics dashboard page displays total minutes watched and estimated earnings for the selected month. The line chart shows earnings trends across multiple months. The Repeating Group lists all classes sorted by minutes_watched with correct earnings display (divided by 100). A 'Data as of [date]' indicator is prominently visible.

4

Step 4 — Build the affiliate click-tracking workflow

If you are using the affiliate API path or simply want to track clicks on Skillshare class links from your Bubble app, build a click-tracking Backend Workflow before the redirect. This approach works regardless of whether you have API access — it captures click data in Bubble's database and gives you analytics independent of Skillshare's own affiliate dashboard. Create a Bubble Data Type named `SkillshareReferralClick` with fields: `class_id` (text), `class_title` (text), `clicked_at` (date), `source_page` (text — which page in your app generated the click). On every class card in your Repeating Group, set the 'Enroll Now' or 'View Class' button's workflow to: (1) Create a new SkillshareReferralClick record with `class_id = Current cell's SkillshareClass's class_id`, `class_title = Current cell's SkillshareClass's class_title`, `clicked_at = Current date/time`, `source_page = current page name`. (2) Open an external website: the Skillshare class URL with your affiliate tracking ID appended as a query parameter (the exact parameter name is provided by Skillshare's affiliate dashboard or the Impact affiliate platform). This two-step click action ensures your Bubble database captures the click before the redirect. On a private analytics page, display SkillshareReferralClick records grouped by class_title to show your most-clicked classes — useful for understanding which class titles and thumbnails drive the most affiliate traffic.

skillshare-click-tracking-workflow.txt
1// Bubble workflow: 'Enroll Now' button click
2//
3// Step 1: Create SkillshareReferralClick
4// class_id = Current cell's SkillshareClass's class_id
5// class_title = Current cell's SkillshareClass's class_title
6// clicked_at = Current date/time
7// source_page = 'Class Discovery Hub' (or current page name)
8//
9// Step 2: Open external website
10// URL = Skillshare class URL + affiliate parameter
11// Example: https://www.skillshare.com/classes/Design-Basics/123456789
12// + "?via=your-affiliate-id" (exact param from affiliate platform)
13//
14// Data Type: SkillshareReferralClick
15// Fields:
16// class_id (text)
17// class_title (text)
18// clicked_at (date)
19// source_page (text)
20//
21// Click analytics Repeating Group:
22// Type of content: SkillshareReferralClick
23// Data source: Search for SkillshareReferralClicks
24// :sorted by clicked_at descending
25// Group by: class_title using :grouped by expression

Pro tip: Add a `user` field (type User) to SkillshareReferralClick if your Bubble app has logged-in users, and populate it with `Current User` in the Create step. This lets you segment click analytics by user cohort — useful for understanding which audience segments engage most with Skillshare content.

Expected result: Every click on a class link creates a SkillshareReferralClick record in Bubble's database before the redirect. The click analytics page shows all referral clicks sorted by date, with grouping by class title showing which classes received the most clicks.

5

Step 5 — Configure the API Connector for the Skillshare affiliate API (post-approval)

After your Skillshare affiliate program application is approved, the affiliate team provides the specific API endpoint URL and authentication format for the affiliate API. The exact endpoint structure is not publicly standardized — Skillshare's affiliate API details are provided directly by their affiliate team or through the affiliate platform they use (such as Impact.com). Once you have the endpoint and auth format: open your Bubble app editor → Plugins tab → API Connector → Add another API. Name it 'Skillshare Affiliate.' Set the Root URL to the base URL provided by Skillshare's affiliate team. Under 'Shared headers,' add the affiliate authorization header — the key name and value format will be specified in the affiliate API documentation you receive. Check the 'Private' checkbox on the auth header to keep your affiliate token server-side. Add an API call named 'Get Classes.' Method: GET. Endpoint: the path for class search or catalog listing as documented. Parameters may include category filter, keyword search, or limit. Set 'Use as' to 'Data.' Click 'Initialize call.' If initialization succeeds, Bubble detects the response schema including class metadata fields (title, instructor, URL, thumbnail, description). Build a Repeating Group bound to this call to display classes with affiliate-tagged enrollment links. All price or earnings amounts from the API should be treated as potentially in cents — divide by 100 for display. If RapidDev's team can help you configure the specific affiliate API endpoint format for your approval type, contact us for a free scoping call at rapidevelopers.com/contact.

skillshare-affiliate-api-setup.json
1// Bubble API Connector — Skillshare Affiliate API
2// (Configuration after affiliate approval — exact values from Skillshare)
3{
4 "api_group_name": "Skillshare Affiliate",
5 "root_url": "[URL provided by Skillshare affiliate team]",
6 "shared_headers": [
7 {
8 "key": "[Auth header key from affiliate docs]",
9 "value": "[Your affiliate token]",
10 "private": true
11 }
12 ],
13 "calls": [
14 {
15 "name": "Get Classes",
16 "method": "GET",
17 "endpoint": "[class listing endpoint from affiliate docs]",
18 "parameters": [
19 { "key": "category", "value": "<dynamic>" },
20 { "key": "limit", "value": "20" }
21 ],
22 "use_as": "Data"
23 }
24 ]
25}
26
27// Affiliate link format (append to class URL):
28// https://www.skillshare.com/classes/Class-Name/ID
29// + ?via=your-affiliate-id (exact parameter from affiliate platform)
30//
31// Always mark affiliate token header as Private — never expose in client requests

Pro tip: Skillshare's affiliate API endpoint details may be provided through the Impact.com affiliate platform rather than directly from Skillshare if Impact is their affiliate management provider. Check your approval email for which platform manages your affiliate account — the API documentation and dashboard will be on that platform's site.

Expected result: After affiliate approval and API configuration, the Skillshare Affiliate API group in Bubble's API Connector initializes successfully and returns class metadata. Repeating Groups using this data source display Skillshare classes with class titles, descriptions, thumbnails, and affiliate-tagged enrollment links.

6

Step 6 — Apply privacy rules and schedule the monthly CSV import reminder

For the CSV import analytics path, there is no automated real-time sync — the data is only as current as the last import. Two actions keep this manageable: a privacy rule protecting the analytics data, and a process reminder for monthly imports. First, privacy rules: go to Data tab → Privacy → SkillshareClass. Add a rule that restricts 'Find this in searches' and 'See all fields' to logged-in admin users only (set condition: 'Current User is logged in AND Current User's is_admin = yes'). Under 'When rule does not apply,' uncheck everything. This prevents other logged-in users (if your Bubble app has public signup) from querying your Skillshare analytics data. Second, the 'Data as of' indicator built into your dashboard page from Step 3 serves as the freshness signal — if the data is more than 30 days old, show a warning element. Add a Bubble condition to a Text element: 'When MAX of Search for SkillshareClasses' import_batch date is more than 30 days ago, show alert: 'Analytics data is over 30 days old — import your latest Skillshare CSV to update.' For the SkillshareReferralClick Data Type, add a similar privacy rule so click analytics are also admin-only. Bubble's Workload Unit consumption for the CSV import path is minimal — database reads from Bubble's own database are far cheaper in WU than API calls, making this approach cost-efficient for high-traffic analytics pages.

skillshare-privacy-and-import-process.txt
1// Bubble Privacy Rule — SkillshareClass Data Type
2// Data tab → Privacy → SkillshareClass
3//
4// Rule: 'Admin Only'
5// Condition: Current User's is_admin = yes
6//
7// When rule applies:
8// [x] Find this in searches
9// [x] See these fields → All Fields
10//
11// When rule does NOT apply:
12// [ ] Find this in searches (blocked)
13// [ ] See any fields (blocked)
14//
15// Apply same rule to: SkillshareReferralClick
16//
17// Staleness alert condition:
18// 'When Page is Loaded' → compute MAX import_batch date
19// Show 'Stale data' alert group when:
20// MAX import_batch < Current date/time - 30 days
21//
22// Monthly CSV import process:
23// 1. Log in to Skillshare instructor dashboard
24// 2. Go to Analytics → Download CSV
25// 3. Log in to Bubble app
26// 4. Go to Data tab → CSV Import
27// 5. Upload new CSV, map fields, click Import
28// 6. Staleness alert disappears; 'Data as of' updates

Pro tip: Consider adding a Bubble 'Admin Import' page (accessible only to you) with a step-by-step UI for the monthly CSV import — an Upload element that accepts CSV files and a workflow that processes the upload. Bubble's built-in CSV Import tool in the editor is fine for occasional use, but a dedicated admin import page makes the monthly refresh faster and reduces the risk of accidentally overwriting existing data with a bad import.

Expected result: The SkillshareClass and SkillshareReferralClick Data Types have admin-only privacy rules. The dashboard shows a staleness warning when data is more than 30 days old. The monthly CSV import process is documented and understood — analytics data will be refreshed by uploading a new CSV export from Skillshare each month.

Common use cases

Affiliate-powered Skillshare class discovery hub

An affiliate marketer or content creator builds a Bubble site that showcases curated Skillshare classes in specific niches (design, photography, business) with affiliate-tagged 'Start Learning' buttons. When a visitor clicks through and starts a Skillshare Premium subscription, the affiliate earns a commission. Bubble calls the Skillshare affiliate API to fetch class metadata and displays classes in a filterable card layout. A Backend Workflow logs each referral click to a Bubble `SkillshareReferralClick` Data Type before redirecting, providing the affiliate with their own click analytics independent of Skillshare's dashboard.

Bubble Prompt

On page load, call Skillshare Affiliate API 'Get Classes' filtered by category = Dropdown Category's value; display in Repeating Group; when 'Start Learning' button clicked, create SkillshareReferralClick record with class_id and timestamp, then open external link with affiliate tracking parameter appended

Copy this prompt to try it in Bubble

Instructor earnings trend dashboard from CSV imports

A Skillshare instructor wants to track their monthly `minutes_watched` and `estimated_earnings` across all classes over time — a view that Skillshare's native dashboard does not provide easily for multi-year trend analysis. Each month, the instructor exports their analytics CSV and imports it into Bubble via the CSV Import tool. The Bubble dashboard displays a line chart of earnings by month using the Charts plugin, a bar chart of minutes_watched by class, and a table view sorted by revenue contribution. The 'Data as of [import_month]' indicator is always visible so the instructor knows when the data was last updated.

Bubble Prompt

Display line chart where data source = Search for SkillshareClasses grouped by report_month, value = sum of earnings_cents / 100; display bar chart where value = sum of minutes_watched by class_title; show 'Last updated: MAX of report_month' in page header

Copy this prompt to try it in Bubble

Team learning portfolio for Skillshare for Business

An L&D manager at a company with a Skillshare for Business team account wants a branded internal portal showing which team members have completed courses, their minutes watched by skill category, and recommended next classes based on role. Skillshare for Business partner API access (requires formal partnership) provides enrollment and completion data per learner. Bubble displays this in a role-filtered Repeating Group where managers see their team's progress and employees see their own learning history and personalized recommendations built from class category data.

Bubble Prompt

On Team Dashboard, call Skillshare Partner API 'Get Learner Enrollments' filtered by team_id; display in Repeating Group grouped by role; highlight learners with minutes_watched < 60 in last 30 days as 'needs engagement'; show category breakdown as pie chart

Copy this prompt to try it in Bubble

Troubleshooting

Cannot find a Skillshare API key section in account settings — no developer portal or API dashboard visible

Cause: Skillshare does not offer a self-service public API. There is no settings page in any Skillshare account tier where you can generate an API key directly. This is a confirmed architectural decision, not a settings you have missed or need a paid plan to unlock.

Solution: Apply to the Skillshare affiliate program at skillshare.com/affiliates for class catalog API access, or contact Skillshare enterprise sales for Skillshare for Business partner API access. While waiting for approval, proceed with the CSV import analytics approach (Steps 2–4 above) to build a functional analytics dashboard immediately.

Earnings displayed in the dashboard appear 100× larger than actual Skillshare payouts — e.g., shows $490.00 when actual earning was $4.90

Cause: Skillshare's analytics CSV or API may report earnings in cents (integer), and the Bubble expression is displaying the raw cents value without dividing by 100. Alternatively, Skillshare may report in fractional dollars in some export formats — confirm your CSV column format.

Solution: Inspect your imported CSV values in Bubble's Data tab → App data → SkillshareClass records. Check what value was stored in `earnings_cents`. If it shows `490` for a $4.90 earning, dividing by 100 gives the correct $4.90. Update all Bubble display expressions to divide earnings by 100. If your CSV already provided dollar amounts (e.g., `4.90`), and you stored them in `earnings_cents` as-is, you may need to multiply by 100 during next import (or rename the field to `earnings_dollars` and remove the /100 conversion).

typescript
1// Correct earnings display:
2// Current cell's SkillshareClass's earnings_cents / 100
3// :formatted as $#,##0.00
4//
5// Verify stored value in Data tab → App data → SkillshareClass
6// If stored as cents (e.g., 490): divide by 100 → $4.90
7// If stored as dollars (e.g., 4.90): display directly, no division

After importing a new monthly CSV, old records are duplicated instead of updated — the dashboard shows data from multiple months mixed together

Cause: Bubble's CSV Import creates new records for every row in each import — it does not check whether a matching record already exists. If you import January's CSV and then February's CSV without deleting January's records, both months' class rows coexist in the database, and aggregation expressions sum both periods together.

Solution: Use the `report_month` field as a filter in all dashboard queries to show only one month's data at a time (e.g., 'Search for SkillshareClasses where report_month = Dropdown Month's value'). For historical trend charts that intentionally show multiple months, this coexistence of multiple months is correct. For same-month re-imports (re-importing current month with updated data), first delete existing records with the same `report_month` value using a 'Delete a list of things' action on a Backend Workflow: 'Delete Search for SkillshareClasses where report_month = [month_to_replace]' before importing the new CSV.

typescript
1// Before re-importing same month's CSV:
2// Backend Workflow: Delete Existing Month Data
3// Delete a list of things: Search for SkillshareClasses
4// where report_month = '2026-06' (the month being replaced)
5//
6// Then run CSV Import with updated CSV for that month
7// This prevents duplicate records for the same reporting period

Skillshare affiliate API Initialize call fails or returns unexpected format after approval

Cause: Skillshare's affiliate API details are provided per-account and may use a non-standard endpoint structure or auth format depending on which affiliate platform (Impact, direct, or other) manages your program. The API format varies and may not match common REST conventions.

Solution: Review the affiliate API documentation or onboarding materials provided specifically with your approval email — do not assume standard REST behavior. Contact Skillshare's affiliate support team with your specific Bubble initialization error (include the error message and the endpoint you used). The affiliate team can confirm the correct endpoint URL, required headers, and auth token format for your account type.

Best practices

  • Always display `minutes_watched` as the headline metric on Skillshare instructor dashboards — Skillshare's royalty model pays per minute watched by Premium members, not per enrollment, making enrollment count an unreliable proxy for revenue
  • Mark your Skillshare affiliate token as 'Private' in Bubble's API Connector — even though affiliate tokens carry lower risk than payment credentials, exposing them in browser DevTools allows competitors to identify and potentially misuse your affiliate tracking setup
  • Add a 'Data as of [last import date]' indicator to every analytics page that uses CSV-imported data — without this, users comparing Bubble analytics to Skillshare's live dashboard will assume the Bubble integration is broken rather than recognizing the data is from the last import
  • Store all monetary amounts in cents (integer) in your Skillshare Data Types, and always divide by 100 at the display layer — this avoids floating-point precision issues with decimal dollar values in Bubble's arithmetic expressions
  • Import Skillshare analytics CSVs on a consistent monthly schedule and filter all dashboard queries by `report_month` to avoid unintentionally aggregating multiple months' data in a single period display
  • If Skillshare provides two separate CSV files (engagement data and earnings data), import both and join on `class_id` for a complete analytics view — relying on only one file produces either engagement data without revenue or revenue data without content context
  • Build click-tracking for all affiliate links using the SkillshareReferralClick pattern before redirecting — this gives you independent click analytics in Bubble's database that is not dependent on Skillshare's affiliate dashboard for traffic analysis
  • Apply Bubble privacy rules to all Skillshare analytics Data Types to restrict visibility to admin users only — instructor earnings and engagement data is confidential business information that should not be queryable by other users of your app

Alternatives

Frequently asked questions

Can I build a Bubble + Skillshare integration without applying to the affiliate program?

Yes — using the CSV import approach (Steps 2–4 above). You can build a fully functional Skillshare instructor analytics dashboard in Bubble by importing your Skillshare analytics CSV exports into Bubble's database using the CSV Import tool. This does not require any API access, affiliate approval, or partner agreement. The limitation is that the data is not real-time — it updates only when you manually export a new CSV and import it. For the affiliate storefront use case (displaying class catalog to visitors), you do need affiliate API access.

Why does Skillshare pay per minute watched instead of per course sale?

Skillshare operates on a subscription model where most students access content through a Premium membership rather than purchasing courses individually. Skillshare pools subscription revenue and distributes it to instructors based on each instructor's share of total Premium minutes watched. This aligns instructor incentives with engagement quality rather than sales volume — an instructor benefits more from creating content that students actually complete and return to than from attracting one-time purchases. For your Bubble analytics dashboard, this means `minutes_watched` is the KPI that directly correlates to earnings.

Will the CSV import approach keep working if Skillshare changes its export format?

The CSV import approach depends on Skillshare's analytics export column names staying consistent. If Skillshare renames or restructures export columns, your Bubble Data Type field mappings will need to be updated before the next import. Spot-check each new CSV file's column headers before importing — compare them against your Bubble Data Type's field names. If column names have changed, update the CSV Import mapping in Bubble accordingly before processing the file.

Does Bubble's CSV Import require a paid plan?

No. Bubble's CSV Import tool (Data tab → CSV Import) is available on all plans including the free plan. It allows you to upload a CSV file and create records in any Bubble Data Type. The only plan-gated feature relevant to this integration is scheduled Backend Workflows (needed for automated reminders or automated processing triggers), which require a paid plan.

How long does it take to get Skillshare affiliate program approval?

Skillshare's affiliate program approval typically takes a few business days after submitting the application at skillshare.com/affiliates. The application asks for your website, content niche, audience size, and how you plan to promote Skillshare. Having an existing website or active content presence improves approval odds. During the wait, build and test your Bubble integration using the CSV import analytics path so the dashboard is ready when affiliate API credentials arrive.

RapidDev

Talk to an Expert

Our team has built 600+ apps. Get personalized help with your project.

Book a free consultation

Integrations are where projects stall

We wire Bubble integrations like this one every week — auth, webhooks, edge cases included. Fixed-price builds from $13K, delivered in 6–10 weeks.

Talk to an integration engineer

We put the rapid in RapidDev

Need a dedicated strategic tech and growth partner? Discover what RapidDev can do for your business! Book a call with our team to schedule a free, no-obligation consultation. We'll discuss your project and provide a custom quote at no cost.