Solution guide · LMS

Building an LMS With Certification and Recertification Tracking

The short answer

A focused certification and recertification module bolted into an existing product runs $15,000 to $60,000. As part of a first release it lands at $50,000 to $130,000 over 10 to 16 weeks. A full multi-tenant platform with proctoring, external evidence review and regulated audit trails runs $150,000 to $350,000 across 6 to 12 months. Those are Digital Heroes delivery bands across 2,000+ projects. The line item that blows every estimate is not the course player. It is the temporal rules engine that decides who is certified, on what date, under which version of the rule.

What certification tracking looks like once real users touch it

A safety manager opens the compliance dashboard on 3 March and exports the list of forklift-certified operators. In August, an inspector asks for that same list as it stood on 3 March. If your credentials table has an expiry column that gets overwritten every time someone recertifies, the question has no answer. You can produce today's truth and nothing else.

Now the ordinary version of worse. In May the client shortens the recert cycle from 24 months to 12. Someone edits the requirement record. Every operator's expiry recalculates overnight and 400 people are marked expired retroactively, including a dozen who certified under the old rule and had eight months left. Payroll blocks their shifts at 6am. That is not a rare failure. It is the default behaviour of a schema where the rule and the credential live in the same row.

The content standard is a decision, not a checkbox

"We'll support SCORM" hides three incompatible answers, and the one you pick determines whether you can host content on a CDN and whether the system can even tell you someone passed.

  • SCORM 1.2 is still what most legacy vendor content ships as. It reports completion through cmi.core.lesson_status, and its suspend_data field is capped at 4096 characters, which real courses overflow, silently losing bookmark state mid-module.
  • SCORM 2004 4th Edition raises suspend_data to 64000 characters and adds sequencing and rollup, at the cost of a specification most authoring tools implement partially.
  • The deployment trap in both: the run-time environment is a JavaScript API the content discovers by walking the opener and parent chain looking for window.API (1.2) or window.API_1484_11 (2004). That means content must run in a same-origin frame. Push your packages to a CDN on another domain and tracking silently stops while the course still plays, which is the single most common "the LMS (Learning Management System) isn't recording completions" ticket.
  • xAPI sends statements to a Learning Record Store and gives you rich data and no verdict. Nothing in xAPI tells you a person is done. Something in your code still has to decide what counts.
  • cmi5 is the one to choose for new content, because it defines both launch and an explicit moveOn criterion per assignable unit: Passed, Completed, CompletedAndPassed, CompletedOrPassed, or NotApplicable. That single field is the completion verdict SCORM makes you infer and xAPI makes you invent.

Decide this before the estimate. Supporting SCORM 1.2 and 2004 and cmi5 is three run-times, three test matrices, and it is a real fraction of the build. If your content is all authored in-house, cmi5 alone is defensible and cheaper.

The rules engine is the product

Certification requirements are effective-dated data, not configuration. Store each requirement as a version with a valid-from date, and have every awarded credential reference the exact version it satisfied. When the cycle changes from 24 months to 12, you publish version 2 with an effective date and a transition policy, and version 1 credentials keep their original expiry until they renew. Without that, a rule edit is a retroactive mass expiry.

Then the credential history has to be append-only. Award, renew, revoke, suspend and reinstate are events, and the current state is a projection over them. That is the only structure that answers "who was certified on 3 March" in August, and it is the difference between passing an audit and rebuilding the system after one.

The expiry maths is where requirements meet reality, and every one of these is a decision someone has to make in writing:

  • What does the expiry anchor to? Completion date plus 24 months, the end of the birth month, or a fixed organisational anniversary. All three exist in real compliance regimes and they are not the same code path.
  • Early recertification. Someone recerts 30 days before expiry. Does the new expiry run from today, or from the old expiry? Anchor from today and you silently shorten every diligent person's cycle by a month, compounding every renewal. Almost every regulated body anchors from the old expiry if you renew inside the window. Pick, and write it down.
  • The recert window. "Opens 90 days before expiry" means a completion outside the window is a fresh certification, not a renewal, with a different anchor.
  • Grace periods. Is a person in grace certified, or not certified but not blocked? That is a different state, and downstream systems ask about it.
  • Equivalency. An external certificate or a prior role counts toward an internal requirement. That is a mapping table plus a reviewer, not a checkbox, and it arrives in month three of every project.

The credential state machine and the notification pipeline

The states worth modelling explicitly: not_started, in_progress, awarded, expiring_soon, in_grace, expired, revoked, suspended. If a vendor shows you a boolean called is_certified, that is the whole review.

Notifications are where this goes wrong operationally. Do not enqueue delayed jobs at award time, because a rule change, an early renewal or a revocation invalidates every queued job and most job runners give you no reliable way to find and cancel one by business key. Run a sweeper that queries credentials falling inside each notification offset (90, 30, 7 days out, then overdue), and dedupe on a key of credential id plus rule version plus offset. Without that key, one re-run after a deploy blasts several thousand people twice, and the second most common consequence is that the client turns notifications off entirely.

Deliverability is a real engineering constraint here, not an afterthought. Certification lists are pulled from HRIS data full of stale addresses for people who left, and a bulk expiry blast to thousands of them spikes bounces. Amazon SES expects bounce rates under 5% and complaint rates under 0.1%, and crossing those puts sending under review, which means the compliance emails stop precisely when you need them. Validate against the HRIS on every sync, suppress hard bounces permanently, and never send an expiry blast from the same identity as transactional login mail.

Evidence, proctoring and the things that happen outside the LMS

Plenty of certifications are not earned by finishing a module. Someone uploads a photo of an external certificate, a supervisor signs off on an observed competency, or a training day happens in a room with no computers. Each of those needs a submission with its own review states (submitted, needs_info, approved, rejected), a named reviewer, a reason, and an expiry that comes from the evidence document rather than the completion date. That workflow is routinely a quarter of the build and is almost never in the brief.

If the credential has real value, someone will ask about proctoring. Integrate a vendor (Proctorio, Honorlock, ProctorU) rather than building it. The work on your side is a session handshake, a results webhook, and a decision nobody wants to make: what happens to an award when a proctoring flag lands after the certificate was already issued. You need the revoke path anyway.

If you plan to issue portable credentials, Open Badges 3.0 aligns with W3C Verifiable Credentials, which means you are signing assertions with a key. Now you own key rotation and a revocation mechanism, because a badge you cannot revoke is a badge you cannot audit. Do not add this in version one unless someone external actually consumes the badge.

Audit trails and regulated environments

If you are in pharma, medical devices, food or aviation, the compliance regime changes the cost shape rather than the feature list.

Under 21 CFR Part 11, an electronic signature must carry the printed name of the signer, the date and time, and the meaning of the signing (review, approval, authorship), and it must be linked to the record so it cannot be excised or copied. That is not a checkbox column. It also means the append-only ledger stops being an architectural preference and becomes a requirement.

The bigger number is validation. A GxP deployment needs IQ, OQ and PQ documentation, a traceability matrix from requirement to test, and a change control process that makes every future release slower. In our delivery experience that adds roughly 30 to 50% on top of the build, and it is documentation and process work, not code.

What this costs and what moves the number

Digital Heroes delivery bands from 2,000+ projects, not market averages.

Focused module inside an existing product: $15,000 to $60,000, roughly 5 to 9 weeks. You already have users, auth, org structure and an admin surface. We add the effective-dated rules engine, the append-only credential ledger, the state machine, the expiry sweeper with idempotent notifications, and audit reporting. Rules in code at the low end, admin-configurable at the high end.

Part of a first release: $50,000 to $130,000 over 10 to 16 weeks. Content playback for one standard, learner UI, admin, assignment rules by role or location, certification and recertification tracking, reporting, and one integration such as an HRIS.

Full platform: $150,000 to $350,000 over 6 to 12 months. Multi-tenant with per-tenant rule authoring, evidence review workflows, proctoring, multiple content standards, verifiable credentials, external reporting integrations, and the operational tooling to run it.

What drives this capability up, in order of impact:

  1. Regulated validation. 21 CFR Part 11 or GxP adds roughly 30 to 50%, almost all of it IQ/OQ/PQ documentation and change control rather than features.
  2. Per-tenant configurable rules. Rules in code are cheap. A rule-authoring UI that a non-engineer can use without retroactively expiring 400 people needs versioning, preview, an impact report and a dry run. It roughly doubles the rules engine cost.
  3. Evidence review workflows. External certificates, supervisor sign-off and offline training each bring their own submission states, reviewer queue and expiry source.
  4. Content standard count. Each additional run-time (SCORM 1.2, SCORM 2004, cmi5) is its own player, its own tracking semantics and its own QA pass.
  5. External reporting integrations. Pushing completions to a body such as CE Broker, or pulling org hierarchy from Workday or BambooHR, is 2 to 4 weeks each, and the org hierarchy is what your entire reporting model depends on.

When you should not build this

If your need is assigning courses to a few hundred employees and tracking who is out of date, buy. Absorb, TalentLMS, Docebo and Litmos all do assignment, expiry and reporting out of the box, and Moodle with Totara covers the open-source end. If you are already on Workday, Workday Learning is one procurement conversation rather than a project. Any of them is live in about three weeks and none of them will lose you a customer.

The honest test: if certification is an obligation your business carries rather than a thing your business sells, buy it.

Build when one of these is true. Certification depends on data that lives inside your own product, so the requirement is "certified operators can only be dispatched to jobs of type X", and round-tripping through a vendor API costs more than the build. The credential is what you sell, meaning learners pay for the certificate and your brand is on it. Or every tenant defines its own rules, which no packaged LMS models without becoming a consulting engagement.

Middle path most teams miss: buy the LMS for content delivery, build only the credential ledger and rules engine on top, and let the LMS post completions into it via xAPI or a webhook. That is the $15,000 to $60,000 band, and it is usually the right call.

How to brief and vet a developer for this

Bring these answers to the first call, because the estimate is fiction without them. What anchors an expiry: completion date, birth month, or a fixed anniversary. Does an early renewal run from today or from the old expiry. Is there a grace period, and is someone in it certified. What happens to existing credentials when a rule changes. Which content standards you must ingest and who authored them. Whether anything is signed under 21 CFR Part 11.

Then ask these:

  • "The client changes the cycle from 24 months to 12. What happens tonight to the people already certified?" You want effective-dated rule versions and a transition policy. "Their expiry recalculates" is the whole answer you need to walk away.
  • "An auditor asks who was certified on 3 March. Show me the query." Only an append-only ledger answers this. A current-state table with an expiry column cannot, at any price.
  • "Someone recertifies 30 days early. What is their new expiry date?" If they have not thought about it, they will anchor from today and silently shorten everyone's cycle.
  • "How does the expiry notification job avoid double-sending after a redeploy?" You want a sweeper with a dedupe key of credential, rule version and offset. Delayed jobs enqueued at award time is the wrong answer.
  • "We host course packages on a CDN. Does SCORM tracking still work?" No, not without a same-origin proxy, because the content finds the API by walking the frame chain. Anyone who has shipped SCORM says this instantly.
  • "SCORM 1.2 or cmi5, and why?" Listen for suspend_data limits and for moveOn. If they have no preference, they have not shipped either.
  • "Show me the credential state machine." Count the states. If revoked, suspended and in_grace are missing, they have modelled a boolean.
  • "Where does the expiry date come from when someone uploads an external certificate?" From the document, not the upload date. Silence here means evidence review was never scoped.
  • "What's your plan when the HRIS sync brings in 300 dead email addresses?" You want suppression, separate sending identities, and an awareness that bounce rates gate deliverability.

One free filter: ask them to price the module with and without configurable rules. Anyone who quotes the same number for both has not built the configurable version.

Research & sources

The evidence behind this guide

Independent findings on why this investment pays off. Every link goes to the primary source.

  1. One in four US employees report lacking career advancement opportunities; 48% of employees who participated in mentorship programs report high job satisfaction versus 29% of non-participants, and access to advancement opportunities ranges from 33% at organizations under 10 employees to 74% at those with 1,000+. Source: Gallup (2025) →
  2. The average number of formal learning hours used per employee fell to 13.7 in 2024, down from 17.4 in 2023, a decline the report attributes partly to a shift toward informal and on-the-job learning not captured in the formal-hours metric. Source: Association for Talent Development (ATD) (2025) →
  3. A study (led by Prof. Pak-Lok Poon, published in Frontiers of Computer Science, 2024) reviewing decades of spreadsheet-quality research found that about 94% of spreadsheets used in business decision-making contain errors, illustrating the hidden risk of manual spreadsheet workarounds that custom software is built to replace. Source: Central Queensland University / phys.org (Prof. Pak-Lok Poon et al.) (2024) →
  4. This analysis cites IDC research that companies lose 20-30% of revenue annually to inefficiencies caused by data silos, Gartner's estimate that poor data quality costs organizations at least $12.9 million per year on average, and a Salesforce benchmark that 80% of IT leaders say data silos hinder digital transformation - illustrating the business case for integrating systems. Source: Cherry Bekaert (citing IDC, Gartner, Salesforce, DATAVERSITY) (2024) →
Rohan Malhotra · Enterprise Software Consultant

Rohan advises mid-market and enterprise teams on ERP, CRM and custom software, and has led delivery on dozens of business-software builds.

Writes for Digital Heroes, shipping business software for 2,000+ brands across 55+ countries since 2017.

FAQ

Frequently asked questions

How much does it cost to add certification and recertification tracking to an existing app?
$15,000 to $60,000 in Digital Heroes delivery experience, assuming you already have users, authentication and an admin surface. The spend goes into the rules engine, the credential state machine, the expiry notification pipeline and audit reporting, not the course player. It climbs past $60,000 once you need per-tenant configurable rules or a regulated audit trail.
How long does it take to build an LMS with certification tracking?
10 to 16 weeks for a first release covering content playback, admin, learner UI and one integration. A focused module inside an existing product is typically 5 to 9 weeks. A full multi-tenant platform with proctoring and evidence review runs 6 to 12 months.
Can you add certification tracking to our existing application?
Yes, and it is usually the cheaper path because auth, users and org structure already exist. The main constraint is whether your current data model can be made append-only for credential history. If completions are stored as mutable rows with an expiry column, expect a migration to an event ledger before anything else, which is normally 1 to 2 weeks of the estimate.
What breaks at scale?
Three things, reliably. Expiry notification jobs re-firing and double-blasting thousands of people because there is no idempotency key, email deliverability collapsing when stale HRIS addresses push bounce rates past the 5% threshold that triggers SES review, and point-in-time audit reports being impossible because history was overwritten rather than appended.
Should we use a third-party LMS instead of building?
If your need is assigning off-the-shelf courses and tracking expiry for a few hundred employees, yes. Absorb, TalentLMS, Docebo or Litmos will beat a custom build on cost and be live in about three weeks. Build only when certification depends on data that lives inside your own product, when the credential is what you sell, or when every tenant defines its own rules.
What can we realistically get for $25,000?
One tenant, one content standard, credential rules written in code rather than configurable by admins, an append-only history ledger, expiry notifications with idempotency, and two or three reports. You will not get proctoring, external evidence review workflows, verifiable credentials, or regulated audit trails at that number. The ledger is the part to insist on, because retrofitting it later costs more than it did originally.
Is $150,000 enough for a full certification platform?
It is the bottom of the realistic band for multi-tenant with per-tenant rule authoring, and it assumes no regulated validation work. If you need 21 CFR Part 11 or GxP validation, the IQ/OQ/PQ documentation alone commonly adds 30 to 50 percent, which puts you closer to $220,000 to $350,000. Each external reporting integration such as CE Broker or an HRIS adds 2 to 4 weeks on top.
Do we need SCORM, or is xAPI enough?
It depends on your content, not your preference. xAPI gives you a stream of statements into a Learning Record Store but no completion verdict, so something still has to decide what counts as done. If your content is modern, cmi5 is the better answer because it defines launch and an explicit moveOn criterion. If you are ingesting client-supplied legacy packages, you need SCORM 2004 4th Edition support regardless.
How do we prove someone was certified on a specific past date?
Only by keeping an append-only event ledger with effective-dated rule versions, so every award references the version of the requirement it satisfied and the date it was in force. A current-state table with an expiry column cannot answer the question at all once a rule changes. This is the single design decision that determines whether the system survives an audit, and it has to be made on day one.
Can I build my product on a no-code tool like Bubble instead of hiring developers?
For testing whether anyone wants the product, yes, and Bubble's paid plans start at $29 a month, which is the cheapest validation you will ever buy. The ceiling arrives with complex data relationships, heavy integrations, performance at a few thousand users, and the fact that you cannot export a Bubble app to servers you control. A path many Digital Heroes clients take: prove demand on no-code, then rebuild custom once revenue justifies it, treating the no-code version as a paid prototype rather than a foundation.
What questions should I ask a development agency on the first call?
Ask who exactly will build it, what happens when scope changes mid-project, what their maintenance terms are after launch, and what they will need from you every week. Then ask them to describe a project that went wrong and what they changed afterward; teams that have shipped at real volume have war stories, and teams claiming a perfect record are hiding something. The scope-change answer matters most: a disciplined shop describes a written change-order process, not a vague promise to be flexible.
Should I customize Moodle instead of building an LMS from scratch?
Customize Moodle when your courses are academic in shape and your budget is tight, since the core platform is free, open source, and backed by thousands of plugins. Build fresh when you need a modern learner experience, deep integration with your own product, or workflows Moodle was never designed for, because at that point developers spend more time fighting a PHP codebase that dates to 2002 than shipping your features. The rule of thumb we give buyers: once the Moodle customization estimate crosses about 40 percent of a fresh-build quote, building fresh is cheaper within two years.
What are the biggest mistakes companies make when building an LMS?
Four repeat offenders: deciding on SCORM or xAPI after the database schema is frozen, testing with 20 users and launching to 2,000, treating reporting as a final-sprint feature, and having no answer for who authors courses after launch. The most expensive is the first, because a content-standard retrofit means rebuilding the course runtime and migrating everything already published. All four are week-one decisions, which is why a paid discovery phase is worth it.
Should we launch an LMS MVP first instead of building everything at once?
Yes. The core loop of enroll a learner, deliver a course, track completion, and pull one report is shippable in 10 to 12 weeks and typically costs 40 to 50 percent of the full roadmap across Digital Heroes builds. Cut gamification, social features, and custom authoring (import SCORM packages from Articulate instead), but never cut the data model, SSO, or content-standard support, because those cannot be bolted on cleanly later.
How many developers does it take to build an LMS?
Four to five people is the working team size on Digital Heroes LMS builds: a project lead, a designer, two engineers, and QA, with part-time DevOps. Bigger teams do not ship an LMS faster, because the schedule is governed by decisions about roles, content standards, and reporting rather than typing speed. Be suspicious of a ten-person quote for a mid-size build, and equally suspicious of one person promising the whole thing.
Keep reading
let's build

Build something worth launching.

A plan, a team, a timeline, within 24 hours. No decks, no discovery calls. Tell us what you're building and we'll come back with a real scope and a real number.

message us directly · we reply within one business day

mission briefing

Monthly dispatch

Playbooks, real build costs, and what we're shipping. One email a month. No fluff.

visit us

New York HQ

1140 Broadway, Suite 704 · New York, NY 10001

Get directions
Online now

Hey there 👋 How can we help you today?