Upselling and Cross-selling for Online Courses: Offers for Existing Students

12 min read

Upselling means offering a customer a bigger or more advanced version of what they already bought. Cross-selling means offering something different that goes with it. For an online course, the upsell is usually the next course or a tier with more support, and the cross-sell is a smaller related product. With existing students, both work when the offer arrives at the point in the course where it solves a problem the student has right then, and when it goes only to the people it fits.

That last condition does most of the work. A student stuck in week one shouldn't hear about your advanced course, and someone who owns the add-on shouldn't be offered it again. So the job comes down to which offer, at which point in the course, and who is left out. Price comes after.

Say you run an online stained glass school. Stained Glass Basics is a $69 self-paced course that ends with a finished window panel. Clean Solder Seams is a $25 mini-course on irons, temperature and flux. Stained Glass Lamps, the advanced course, costs $159. In the last twelve months 840 people bought the basics course: 290 finished it, 230 haven't logged in for more than a month, and 320 are somewhere in between. These are example numbers for the walkthrough, not benchmarks.

Upselling and cross-selling: what each means for a course

Upsell Cross-sell
What it is Further along the same path: the next level, more support, longer access A different product that helps with the current one
In the example Stained Glass Lamps, $159 Clean Solder Seams, $25
When to offer it After the student finishes the first course When the problem it solves shows up
Price Usually higher than the first course Usually lower
Who gets it Graduates Students at a specific lesson, or buyers at checkout

A bundle sits between the two. At checkout you offer the course and the add-on together for less than both bought separately: basics plus soldering for $84 instead of $94. The buyer saves $10 and you take $15 more than the course alone brings.

The table hides two things. An upsell assumes the first course worked: someone who never finished a flat panel has no reason to think a lamp will go better. And a cross-sell for a problem the student doesn't have yet reads as an ad. Soldering at lesson 4, when the first seams come out lumpy and full of pits, makes sense to anyone who got there.

Cross-selling to existing customers: pick the moment

A course knows how far each student got, which a shop doesn't. We'd use three moments, plus one group of buyers who get no offer at all.

Offer moments along the stained glass basics course: the bundle at checkout, the soldering email after lesson 4, the lamps course after the final lesson, no offer for stalled buyers, and the offer stops once the lamps course is bought Checkout $69 course, or $84 with Soldering Lesson 4 completed one email: Soldering, $25 (owners skipped) Stalled 30+ days a check-in, no offer Final lesson done Stained Glass Lamps, $129 with LAMPS30 Bought Lamps offer emails stop Each offer goes once, to the people it fits

At checkout. A second column on the sales page with the $84 bundle; buyers who don't want it take the $69 option. Don't add Stained Glass Lamps as a third column: a beginner can't judge a course that assumes skills they don't have yet.

At lesson 4. The first soldered seams are where a cheap iron or the wrong temperature shows most. One email the day after a student completes lesson 4, explaining why beads come out lumpy and offering the $25 mini-course, is a cross-sell with a reason attached. About 70 people buy the basics course a month (840 over twelve months), and fewer than that reach lesson 4, so this is at most about 16 emails a week.

After the final lesson. This is the upsell: the student has a finished panel and proof that your teaching works for them. We'd wait three days before mentioning Stained Glass Lamps, so the first email after finishing is about what they made.

Not to stalled buyers. The 230 who stopped logging in get a check-in about the lesson where they stopped, and no offer. Asking them to pay for a second course while the first one sits unused gets the order wrong. Get them back into the course first.

Who gets which offer

Four segments cover the basics course. Order is priority: a graduate who once stalled counts as a graduate. Of the 290 graduates, 35 already bought Stained Glass Lamps at full price from a newsletter, which leaves 255 for the alumni offer.

Example plan for the stained glass basics course (840 buyers in twelve months):

SegmentWho is inSizeOfferExclude
GraduatesCompleted the final lesson290, minus 35 = 255Stained Glass Lamps, $129 with LAMPS30Bought Stained Glass Lamps
Reached lesson 4Completed lesson 4, no SolderingFewer than 70 a monthClean Solder Seams, $25Bought Soldering or the bundle; graduates
New buyersBought in the last 7 daysAbout 70 a month in totalNone: a getting-started emailCompleted lesson 1
Stalled buyersNo visit for 30+ days, not finished230None: one check-inGraduates

Overlap to watch: a buyer who took the $84 bundle already owns Clean Solder Seams, so the lesson 4 email must skip them.

The bundle exclusion is the one people miss. A bundle buyer owns Clean Solder Seams without having bought the $25 offer, so the lesson 4 rule has to check access to the course, not the offer they paid for. Email segmentation covers exclusions like this one in more detail.

Pricing the next step

The alumni code takes a fixed $30 off Stained Glass Lamps, so graduates pay $129 instead of $159. Every graduate who would have paid full price anyway now pays $30 less; each one who buys only because of the code brings $129. So the code pays for itself if it adds one buyer for every 4.3 who would have bought at full price ($129 ÷ $30). If you think graduates who want lamps will pay $159 regardless, skip the discount and work on the email instead.

We'd use a fixed amount for a single course. "$30 off" is easy to check against the price on the page; "19% off" makes people do arithmetic before they decide.

Deadlines are where rolling offers go wrong. A code valid until 31 October suits a campaign that reaches every graduate on the same day. Graduates who finish on different days get a generous window or a useless one. For the rolling offer we'd use a code without an end date, limited to the Stained Glass Lamps offer: a "3 days left" line that nothing enforces teaches students to ignore your deadlines. A dated code to the whole graduate segment twice a year is fine.

The bundle price should sit below the sum and above the main course: $84 is between $69 and $94. A student who takes the bundle and later the lamps course with the code pays $84 + $129 = $213, against $69 for the first course alone. For how to set the first price and its tiers, see online course pricing.

The emails after the final lesson

Three emails, one offer repeated once, and a stop as soon as the person buys. The planner starts from this example; change the days or switch emails off to fit your course.

Example sequence for graduates of the basics course (day 0 is the day they finish):

  1. Day 0, "Your first panel is done": congratulations, the certificate link, a request for a photo. No offer.
  2. Day 3, "From panels to lamps": what Stained Glass Lamps adds, $129 with the code LAMPS30, a link to the course page. Stops if they bought.
  3. Day 8, "What do you want to make next?": one question to answer by reply, the code again. Stops if they bought.

Replies to the day 8 email tell you why graduates don't take the next course (no time until spring, no room for a bigger workbench, the price), which no open rate will. For delays and stop rules in general, see drip campaigns.

Where upselling goes wrong

  • One newsletter with all three products to all 840 buyers: 35 get an offer for a course they own, 230 stalled buyers are asked for more money, and new buyers see a course they can't judge.
  • An upsell in the welcome email, before the student has cut a single piece of glass.
  • A discount every month. Once graduates expect a code, full price is for the impatient.
  • Cross-selling whatever you have. A time-management course offered to glass students is an ad, not a next step.
  • No stop rule. An offer email reaching someone who bought yesterday is the most visible mistake here, and the easiest to prevent.

There are also cases where we'd skip upselling entirely. A school with one course has nothing to offer graduates yet: write the second course first. And if only a small share of buyers ever reaches the final lesson, the graduate segment is too small to matter, and the same effort spent on getting students through the course pays more.

How to set this up in Scholaxy

In Scholaxy the pieces are segments (who is in), offers and promo codes (what they pay), and processes (when each offer goes out).

Step 1. Segments. In "Students" → "Segments", click "+ Add a segment", choose "Dynamic" and click "Create and open". Build "Bought Stained Glass Lamps" with the condition "Training access", the "ever was" option and the Stained Glass Lamps course, and "Bought Soldering" the same way. Then "Graduates, no Stained Glass Lamps": "Course participant: lesson (entry, homework, video)" → the final lesson with "Lesson completed", plus "Belongs to a segment" → "does not belong to" → "Bought Stained Glass Lamps". Click "Save and recalculate" and check "Members right now": in the example it reads 255.

The Segments page in Scholaxy with segments sorted into folders
Open "Students" → "Segments" and create dynamic segments: the buyers of each course, and graduates who haven't bought the next one.

Step 2. The bundle. Add a second offer to the basics course's product, "Basics + Soldering", with $84 as the "Original" price. In the offer card, under "Products in the offer", click "+ Add a product to the offer", choose "Pick from the existing products" and pick Clean Solder Seams. Switch on "Buyers" in the Soldering course's access, or payment won't open it. Put both offers in the "Pricing" block of the sales page, one per column; a website button charges the "Original" price, so don't set the $84 as a "Discount".

An offer card with the Products in the offer block
In the bundle offer, click "+ Add a product to the offer" under "Products in the offer" and pick the second course.

Step 3. The alumni code. Open /crm/promocodes → "+ New promo code": code LAMPS30, "Fixed amount", value 30, and the Stained Glass Lamps offer's ID in "For one offer only (ID)". Leave "Valid until" empty for the rolling offer. Graduates type the code into the "Promo code:" field on the payment page. A shared code can travel. For a code per student, create a product of the "Promo code" type, pick LAMPS30 in "The promo-code template to issue" and add that product to the basics course's offers. Each buyer then gets a personal code by email after payment, usable once and only by them, with the template's discount and offer limit but not its dates. The catch: it arrives at purchase, months before the student needs it.

The promo codes list in SmartCRM
Create the alumni code with "+ New promo code": a fixed amount, and the next course's offer ID in "For one offer only (ID)".

Step 4. The graduate process. "Processes" → "Create new" → "By LMS users". On the "General" tab, under "The launch trigger", choose "Periodic check", set the entry rule to "Belongs to a segment" → "Graduates, no Stained Glass Lamps" and "The limit of entries per client" to 1. The first checks pick up everyone who already matches (all 255), then each new graduate. To leave past graduates out, choose "On event" → "Course completed" with the course instead; it fires only when a student submits the assignment of the anchor lesson set under "🎓 Certificate" on the training page. Check "Matching right now" before you click "▶ Activate".

The launch trigger block on the General tab of a process
On the "General" tab, pick "Periodic check" with the graduates segment as the rule, or "On event" for a specific lesson.

On the "Process" tab the chain is "Send an email" → "Delay" of 3 days → "Send an email" with the offer, the code and a link to the Stained Glass Lamps page → "Delay" of 5 days → "Send an email" with the question. Use "Send an email" blocks: they skip people who unsubscribed, while chain emails from "Run a broadcast" don't respect unsubscribes yet. The lesson 4 email is a second process: "On event" → "Lesson completed" with lesson 4 picked, the rule "Belongs to a segment" → "does not belong to" → "Bought Soldering", then "Delay" of 1 day and "Send an email".

Step 5. The stop. On the same "General" tab, under "Execution control", pick "Bought Stained Glass Lamps" in "A stop condition by segment". A graduate who buys after the day 3 email leaves the process before day 8, whichever block they're waiting on. Test with "▶ Test" on your own email first.

The stop condition by segment field on the General tab of a process
Under "Execution control", choose the next course's buyers in "A stop condition by segment" so buyers get no more offer emails.

Step 6. Two courses in one order. For a graduate who replies asking for Stained Glass Lamps and Clean Solder Seams together, open their card → "⚡ Actions" → "🛒 Create an order", add both offers under "Order items" (an order can hold several) and send the payment link with "✉️ Send to …". LAMPS30 works there too and takes $30 off the Stained Glass Lamps line only. Every extra purchase is paid on its own payment page; nothing charges the card again by itself (only Stripe subscriptions do).

The Orders list in SmartCRM
For a student who wants two courses at once, create one order with both offers and send the link from the order card.

Can I make the offer on the thank-you page after payment?

The "Thank you" page after payment has a title, a text and a button with any URL you choose. Point the button to the Clean Solder Seams page if you like. It's a link to a second purchase with its own payment, not an add-on to the first one.

How many offers should one student get?

One at a time. With the stop segment and an entry limit of 1 per process, a student gets the soldering email once and the Stained Glass Lamps emails once.

What to set up first

  1. Write down your next step for graduates and one cross-sell tied to a specific lesson. If you don't have a second course yet, stop here and build it.
  2. Create the buyer segments per course with "Training access" and the "ever was" option, then the graduates segment that excludes buyers of the next course.
  3. Add the bundle offer and put it next to the main one on the sales page.
  4. Create the alumni code, limited to one offer, without an end date.
  5. Build the graduate process with the stop segment, test it on your own email, check "Matching right now" and activate.
  6. Add the lesson 4 process after the first one has run for a few weeks.
  7. After a month, read "The funnel by steps" on the process "Statistics" tab, and the replies to the day 8 email.
Try Scholaxy for freeBuild this workflow in Scholaxy

Keep reading

Ready for
launch?

Create your school
Pricing Terms Privacy DPA Contact
© Scholaxy
Cookies