• Use Cases
  • Pricing
  • Security
  • Docs
Sign InStart free

The outbound integration layer for SaaS products: emit once, then let Meshes handle routing, retries, fan-out, and delivery history.

© Copyright 2026 Meshes, Inc. All Rights Reserved.

About
  • About
  • Blog
  • Contact
  • FAQ
Product
  • Pricing
  • Demo
  • Security
  • Changelog
  • Status
Compare
  • All comparisons
  • Build vs buy
  • vs Zapier
  • vs Make
  • vs n8n
  • vs Paragon
  • vs Merge
Use Cases
  • All use cases
  • Payment failed
  • User signup fan-out
  • Churn prevention
  • Trial expired events
  • Lesson completion flows
  • Page completion triggers
  • Page visit Intercom flows
Developers
  • Documentation
  • Agents
  • API Reference
  • MCP Server
  • llms.txt
Legal
  • Terms of Service
  • Privacy Policy
  • Acceptable Use Policy
  • Cookie Policy

Use CaseCourse progress routing

Lesson Completion Flows - Route Course Progress to Your Entire Stack

Completion rate is not just a reporting metric. It is a routing trigger. When a student finishes a lesson or crosses a progress milestone, Meshes makes sure your CRM, lifecycle email, instructor alerts, and milestone automation all react from the same signal with delivery visibility built in.

Start freeView documentation

Event: lesson.completed · Destinations: HubSpot, Mailchimp, Slack, ActiveCampaign

The problem

Why this workflow breaks down without a delivery layer

Course platforms and LMS products rarely struggle to record that a lesson was completed. They struggle to make the rest of the business react to that moment quickly and consistently. Marketing wants the next lesson sequence, instructors want visibility into momentum, and lifecycle tooling needs current progress context.

Without a delivery layer, teams end up stitching together one CRM sync, one email audience update, one Slack notifier, and one tag-based automation path. Those branches drift fast, especially when progress-based workflows depend on module milestones instead of calendar timing.

Students who finish Module 3 should not get the same follow-up as students stuck on Module 1. Behavioral routing keeps the business aligned with what the learner actually did, not what day they signed up.

The event flow

One event in. Every downstream system stays in sync.

Each use case follows the same product story: Meshes receives the source event once, maps it to the right destinations, and keeps delivery visible when downstream APIs fail.

Event payload

lesson.completed

{
  "student_id": "stu_2048",
  "email": "nina@academyflow.io",
  "lesson_id": "lesson_customer-research",
  "lesson_title": "Customer Research Fundamentals",
  "module_id": "module_growth-foundations",
  "module_title": "Growth Foundations",
  "course_id": "course_creator-accelerator",
  "completion_percentage": 62,
  "time_spent_seconds": 1840,
  "completed_at": "2026-03-21T14:18:00Z"
}

HubSpot

Meshes updates lesson and progress properties so marketing and lifecycle automation can segment students by milestone.

Students who reach the right milestone can move into next-lesson or reminder paths without manual exports.

Mailchimp

Meshes adds the student to the right audience or list for next-lesson, reminder, or re-engagement sequences.

Email follow-up is driven by actual course progress instead of a fixed calendar drip.

Slack

Meshes sends a real-time lesson completion alert to #instructor-alerts with course and module context.

Instructors and customer education teams can see momentum while it is happening.

ActiveCampaign

Meshes applies a milestone tag tied to the module or completion threshold.

Behavior-driven automation can branch on the progress signal that matters most.

How Meshes handles it

What Meshes takes off your team's plate

Instead of maintaining separate workers, retry logic, and visibility per destination, Meshes gives you one event path, destination-aware routing, and built-in delivery guarantees.

From your product

lesson.completed enters Meshes once

import MeshesEventsClient from '@mesheshq/events';

const meshes = new MeshesEventsClient(
  process.env.WORKSPACE_PUBLISHABLE_KEY!,
);

await meshes.emit({
  event: 'lesson.completed',
  resource: 'course',
  resource_id: 'creator-accelerator',
  payload: {
    student_id: 'stu_2048',
    email: 'nina@academyflow.io',
    lesson_id: 'lesson_customer-research',
    lesson_title: 'Customer Research Fundamentals',
    module_id: 'module_growth-foundations',
    module_title: 'Growth Foundations',
    course_id: 'course_creator-accelerator',
    completion_percentage: 62,
    time_spent_seconds: 1840,
    completed_at: '2026-03-21T14:18:00Z',
  },
});

Across destinations

Each downstream tool gets the context it needs

  • • HubSpot receives progress milestone fields so lifecycle and segmentation stay aligned with the student record.
  • • Mailchimp receives the next-lesson or reminder audience update from the lesson completion event.
  • • Slack receives a live progress alert with course, module, and completion context.
  • • ActiveCampaign receives a milestone tag that downstream automation can use for module-completion follow-up.

On every delivery

Retries, replay, and delivery history stay built in

  • • Progress signals fan out in parallel, so one slow downstream API does not hold up the rest of the student follow-up path.
  • • Replay gives you a clean way to recover a missed milestone after a credential, mapping, or provider issue is fixed.
  • • Per-destination delivery history makes it obvious which follow-up path ran and which one still needs attention.

Why this matters

Business impact, not just API plumbing

Improve completion with timely follow-up

Students respond better to the next lesson, reminder, or encouragement when it is triggered by actual progress instead of an arbitrary delay.

Segment by behavior, not signup date

Course businesses need to know who is stalled, who is engaged, and who is moving fast. Progress-based routing keeps the rest of the stack aligned with that reality.

Stop treating course automation as custom glue

Completion-driven workflows are easy to imagine and messy to maintain. Meshes gives you the delivery layer those milestone automations depend on.

Related

Keep going with docs, integrations, and deeper architecture reading

Docs

Quickstart

See the fastest path from first event to routed delivery inside Meshes.

Open link

Docs

Integrations & Rules

See how Meshes maps a single progress event to multiple downstream destinations.

Open link

Integration

HubSpot Integration

Keep progress-related properties and segmentation current inside HubSpot.

Open link

Integration

Slack Integration

Push lesson-completion alerts straight into the channel your team watches.

Open link

Blog

Event Routing for SaaS

See why behavior-driven routing works better than one-off integration branches.

Open link

Use Case

Page Completion Triggers

See a related pattern for onboarding steps and multi-stage activation flows.

Open link

Compare

Meshes vs. DIY

Compare milestone routing with maintaining course-progress workers and queue logic yourself.

Open link

Next stepStart free or view the documentation

Turn course progress into coordinated follow-up

Route lesson.completed through Meshes once and let your CRM, lifecycle email, instructor alerts, and milestone automation react from the same progress signal.

Start freeView documentation