• 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
  • Security
  • Blog
  • Contact
  • FAQ
Product
  • Pricing
  • Demo
  • Integrations
  • Guides
  • Changelog
  • Status
Compare
  • All comparisons
  • Build vs buy
  • vs Paragon
  • vs Merge
  • vs n8n
  • vs Zapier
  • vs Make
Use Cases
  • All use cases
  • Embedded CRM sync
  • Per-tenant Slack
  • HMAC webhooks
  • Multi-env workspaces
  • Payment failed
  • User signup fan-out
  • Churn prevention
  • Trial expired events
Developers
  • Documentation
  • Agents
  • Tools
  • 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 Into Each Workspace

Course platforms often serve instructors, creators, and schools who each want progress data in their own CRM, email, and team tools. Meshes lets your product emit lesson.completed once and deliver it into every workspace's connected destinations with per-workspace credentials and delivery visibility built in.

Start freeView documentation

Event:lesson.completed· Destinations:HubSpotMailchimpSlackActiveCampaign

The problem

Why this workflow breaks down without a delivery layer

Course platforms rarely struggle to record that a lesson was completed. They struggle to make the rest of each instructor or creator stack react to that moment quickly and consistently. Every workspace wants the next lesson sequence, instructor alerts, and progress context in their own tools.

Without a delivery layer, teams stitch together per-customer CRM syncs, audience updates, Slack notifiers, and tag-based automation paths. Those branches drift fast — especially when progress-based workflows depend on module milestones instead of calendar timing and every workspace has its own rules.

Students who finish Module 3 should not get the same follow-up as students stuck on Module 1. Behavioral routing keeps each workspace 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.

Meshes receives the source event once, maps it to the right destinations per workspace, 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 using the workspace's HubSpot connection so segmentation stays aligned with the student record.

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

Mailchimp

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

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

Slack

Meshes sends a progress alert to whichever channel the workspace connected, with course and module context.

Instructors and customer-education teams in each workspace can see momentum while it is happening.

ActiveCampaign

Meshes applies a milestone tag in the workspace's ActiveCampaign connection tied to the module or completion threshold.

Behavior-driven automation inside each workspace 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.completedenters 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

  • • Each workspace owns which destinations receive milestone events and how fields get mapped.
  • • Progress signals fan out in parallel per workspace, so one slow downstream API does not hold up the rest of the follow-up path.
  • • Replay gives each workspace a clean way to recover a missed milestone after a credential, mapping, or provider issue is fixed.

On every delivery

Retries, replay, and delivery history stay built in

  • • Per-destination delivery history makes it obvious per workspace which follow-up path ran and which one still needs attention.
  • • Per-workspace credentials mean an OAuth refresh in one tenant never affects delivery in another.
  • • Environment workspaces let course platforms run dev and staging progress flows against sandbox tools before touching real learner data.

Why this matters

Business impact, not just API plumbing

Higher completion with timely follow-up, in every workspace

Students respond better to the next lesson, reminder, or encouragement when it is triggered by actual progress — no matter whose workspace they live in.

Behavior-based segmentation, not signup date

Course businesses need to know who is stalled, who is engaged, and who is moving fast. Progress-based routing keeps every workspace aligned with that reality.

Course automation as infrastructure, not per-tenant glue

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

Related

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 per workspace.

Open link

Integration

HubSpot Integration

Keep progress-related properties and segmentation current inside each workspace's HubSpot.

Open link

Integration

Slack Integration

Push lesson-completion alerts straight into whichever channel each workspace 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 per workspace

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

Start freeView documentation