Skip to main content
RapidDev - Software Development Agency
retool-integrationsREST API Resource

How to Integrate Retool with FutureLearn

Connect Retool to FutureLearn by creating a REST API Resource using OAuth 2.0 or API token authentication against FutureLearn's Partner API. Build learning management dashboards that track course enrollment, learner progress, completion rates, and certificate data for organizations running FutureLearn courses at scale.

What you'll learn

  • How to set up FutureLearn Partner API credentials and configure them in a Retool REST API Resource
  • How to query course enrollment, learner progress, and completion data from the FutureLearn API
  • How to build an enterprise learning dashboard tracking learner progress and certificate completion
  • How to create a course performance report showing enrollment trends and drop-off rates
  • How to combine FutureLearn learning data with your internal HR database for employee training compliance
Book a free consultation
4.9Clutch rating
600+Happy partners
17+Countries served
190+Team members
Intermediate14 min read25 minutesOtherLast updated April 2026RapidDev Engineering Team
TL;DR

Connect Retool to FutureLearn by creating a REST API Resource using OAuth 2.0 or API token authentication against FutureLearn's Partner API. Build learning management dashboards that track course enrollment, learner progress, completion rates, and certificate data for organizations running FutureLearn courses at scale.

Quick facts about this guide
FactValue
ToolFutureLearn
CategoryOther
MethodREST API Resource
DifficultyIntermediate
Time required25 minutes
Last updatedApril 2026

Build a FutureLearn Learning Management Dashboard in Retool

FutureLearn's native analytics interface shows course-level metrics, but L&D managers at organizations running multiple FutureLearn programs often need more: learner progress tracked against HR records, completion rates compared across cohorts, compliance reporting showing which employees have completed required training, or a bulk enrollment tool for onboarding new staff to required courses. Retool lets you build these views directly against the FutureLearn Partner API.

FutureLearn's Partner API provides access to enrollment data, learner progress (step completions), quiz scores, and certificate issuance for courses your organization runs or has licensed. Access requires a FutureLearn partner relationship — either as a course creator or a client organization purchasing access for employees. Authentication uses OAuth 2.0 or token-based auth depending on your partner tier.

The highest-value Retool use case for FutureLearn is an L&D compliance dashboard that joins FutureLearn completion data with your HR system's employee records. HR managers can see which employees have completed mandatory training courses, who is enrolled but hasn't progressed in 7 days, and which departments have the lowest completion rates — all without manually exporting FutureLearn reports and joining them with HR spreadsheets.

Integration method

REST API Resource

FutureLearn connects to Retool via a REST API Resource using OAuth 2.0 or API token authentication through FutureLearn's Partner API. The API provides access to course enrollment data, learner progress, and completion statistics for organizations that publish or license courses through FutureLearn's platform. Retool proxies all API calls server-side, keeping credentials secure.

Prerequisites

  • A FutureLearn Partner or Client organization account with API access enabled
  • FutureLearn Partner API credentials (OAuth client ID and secret, or API token — obtained from your FutureLearn partner contact or developer portal)
  • Your FutureLearn organization ID and course IDs for the courses you manage
  • A Retool account with permission to create Resources
  • Basic familiarity with Retool's query editor, Table component, and optional access to your internal HR database

Step-by-step guide

1

Obtain FutureLearn Partner API credentials

FutureLearn's Partner API is not publicly available to all users — it requires a partner relationship. If your organization publishes courses on FutureLearn or has a corporate learning agreement, contact your FutureLearn account manager or visit the FutureLearn Partners portal to request API access. Once API access is enabled, you will receive one of two credential types depending on your partner tier. For organizations with full partner access, you receive an OAuth 2.0 Client ID and Client Secret used to authenticate via the authorization code or client credentials flow. For simpler partner integrations, FutureLearn may provide a static API token that is passed as a Bearer token in request headers. For OAuth 2.0 client credentials flow (recommended for server-to-server integrations like Retool), request a token via POST https://www.futurelearn.com/oauth/token with body: grant_type=client_credentials&client_id=YOUR_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET. The response includes an access_token valid for a specific duration. Store your credentials in Retool Configuration Variables: Settings → Configuration Variables. Create FUTURELEARN_ACCESS_TOKEN (mark as secret), FUTURELEARN_CLIENT_ID, FUTURELEARN_CLIENT_SECRET, and FUTURELEARN_ORG_ID. If using a static API token, store only FUTURELEARN_ACCESS_TOKEN.

Pro tip: FutureLearn's Partner API access is controlled by your account relationship. If you only have a learner or instructor account, you will not have Partner API access. Contact FutureLearn's partner team at partners@futurelearn.com to request API credentials.

Expected result: You have FutureLearn API credentials stored as Retool Configuration Variables and know your organization ID and course IDs.

2

Create the FutureLearn REST API Resource in Retool

In Retool, navigate to the Resources tab and click Add Resource. Select REST API from the connector list. Name: FutureLearn Partner API Base URL: https://www.futurelearn.com Authentication: Select Bearer Token. In the Token field, enter {{ retoolContext.configVars.FUTURELEARN_ACCESS_TOKEN }}. This references the access token stored as a configuration variable in the previous step. Add a default header: Content-Type: application/json. For OAuth 2.0 setups where the token expires, you will need to implement token refresh. Create a refreshToken query in your Retool app that posts to /oauth/token with the client credentials — then use a Retool Workflow to refresh the token on a schedule. Click Create Resource. Test the connection by creating a test query: GET /api/v1-partner/runs to list available course runs your organization manages. A 200 OK response with course run data confirms authentication is working. A 401 Unauthorized response means the access token is expired or incorrect. For API version clarity: FutureLearn's partner endpoints use /api/v1-partner/ as the path prefix. Individual learner and course data endpoints follow this structure: /api/v1-partner/runs/{run_id}/enrollments for enrollments, /api/v1-partner/runs/{run_id}/steps for step data.

Pro tip: Keep the base URL at https://www.futurelearn.com without a path suffix — FutureLearn partner API endpoints all start with /api/v1-partner/ which you'll specify per-query. This gives you flexibility to also call non-partner endpoints from the same resource if needed.

Expected result: The FutureLearn REST API Resource is created. GET /api/v1-partner/runs returns a 200 OK with a list of course runs your organization manages.

3

Query course runs and enrollment data

Create a getCourseRuns query: GET /api/v1-partner/runs. This returns all course runs associated with your partner organization. Each run object includes: run_id, name (course name with run number), course_slug, start_date, end_date, enrollment_count, and status (active, upcoming, archived). Create a Select component bound to getCourseRuns.data for the user to pick which course run to analyze. When a run is selected, trigger the next query automatically. Create a getEnrollments query: GET /api/v1-partner/runs/{{ select_courseRun.value }}/enrollments. This returns all learner enrollments for the selected run with: learner_identifier (anonymized or email depending on your partner agreement), enrolled_at, unenrolled_at, fully_participated_at (date of completion), purchased_statement_at (certificate purchase date), and step_completion_percentage. The step_completion_percentage field is the most important for progress tracking — it represents the percentage of course steps the learner has marked as complete. Learners with 100% step completion who also have fully_participated_at populated have completed the course. Add pagination parameters to getEnrollments: page: {{ Math.floor(table_enrollments.pagination.offset / 100) + 1 }} and per_page: 100.

transformer_enrollments.js
1// Transformer for FutureLearn enrollments
2const enrollments = data?.enrollments || [];
3const today = new Date();
4
5return enrollments.map(enrollment => {
6 const enrolledDate = enrollment.enrolled_at ? new Date(enrollment.enrolled_at) : null;
7 const completedDate = enrollment.fully_participated_at ? new Date(enrollment.fully_participated_at) : null;
8 const daysEnrolled = enrolledDate ? Math.floor((today - enrolledDate) / 86400000) : 0;
9
10 let completionStatus = 'In Progress';
11 if (enrollment.unenrolled_at) completionStatus = 'Unenrolled';
12 else if (completedDate) completionStatus = 'Completed';
13 else if (enrollment.step_completion_percentage === 0 && daysEnrolled > 7) completionStatus = 'Inactive';
14
15 return {
16 learner_id: enrollment.learner_identifier,
17 enrolled_at: enrolledDate ? enrolledDate.toLocaleDateString() : '',
18 completed_at: completedDate ? completedDate.toLocaleDateString() : '',
19 progress: `${Math.round(enrollment.step_completion_percentage || 0)}%`,
20 progress_raw: enrollment.step_completion_percentage || 0,
21 status: completionStatus,
22 days_enrolled: daysEnrolled,
23 has_certificate: !!enrollment.purchased_statement_at,
24 certificate_date: enrollment.purchased_statement_at ? new Date(enrollment.purchased_statement_at).toLocaleDateString() : ''
25 };
26});

Pro tip: FutureLearn may anonymize learner identifiers depending on your data sharing agreement. If you see hashed identifiers instead of emails, contact your FutureLearn partner manager to request the enhanced data sharing tier that provides email-level matching.

Expected result: The enrollments Table shows all learners for the selected course run with progress percentages, status badges, and certificate acquisition data.

4

Build step-level completion analytics

Create a getCourseSteps query: GET /api/v1-partner/runs/{{ select_courseRun.value }}/steps. This returns all steps in the selected course run with: position (step number), title, step_type (article, video, discussion, quiz, assignment), and completion_percentage (what percentage of enrolled learners completed this step). The step-level completion percentages reveal the drop-off funnel — steps with significantly lower completion than the previous step indicate content friction points where learners are abandoning the course. Create a Chart component (set to Line or Bar chart type) and bind it to a transformer that formats the steps data as a Plotly-compatible dataset: return { x: steps.map(s => `Step ${s.position}: ${s.title.substring(0, 30)}`), y: steps.map(s => s.completion_percentage) }. For cohort comparison (comparing completion across multiple runs of the same course), create a second Select for a comparison run and run getCourseSteps again with the comparison run ID. Display both completion series on the same Chart to show whether a redesigned course step improved completion rates. For the overview summary Stat components, compute: total enrolled, total completed (fully_participated_at not null), completion rate (completed/enrolled × 100), and average progress percentage across all learners.

transformer_steps_chart.js
1// Transformer for step completion funnel chart
2const steps = data?.steps || [];
3return {
4 data: [{
5 x: steps.map(s => `Step ${s.position}`),
6 y: steps.map(s => Math.round(s.completion_percentage || 0)),
7 type: 'bar',
8 name: 'Completion %',
9 marker: {
10 color: steps.map(s => {
11 const pct = s.completion_percentage || 0;
12 if (pct >= 70) return '#22c55e';
13 if (pct >= 40) return '#f59e0b';
14 return '#ef4444';
15 })
16 },
17 text: steps.map(s => `${s.title.substring(0, 25)}...`),
18 hovertext: steps.map(s => `${s.title}<br>Type: ${s.step_type}<br>Completion: ${Math.round(s.completion_percentage || 0)}%`)
19 }],
20 layout: {
21 title: 'Step Completion Funnel',
22 yaxis: { title: 'Completion %', range: [0, 100] },
23 xaxis: { title: 'Course Step' }
24 }
25};

Pro tip: Sort steps by position before building the chart — the FutureLearn API may not always return steps in sequence order. Use: steps.sort((a, b) => a.position - b.position) before mapping.

Expected result: A step completion funnel bar chart shows the drop-off pattern across all course steps, with color coding highlighting steps below 40% completion that need content review.

5

Join learner data with internal HR records for compliance reporting

The most powerful FutureLearn Retool integration joins FutureLearn enrollment data with your internal HR database. This requires a second Retool Resource configured for your database (PostgreSQL, MySQL, or another supported engine). Create a getEmployees query against your HR database: SELECT id, name, email, department, manager_name, hire_date FROM employees WHERE active = true ORDER BY department, name. In a JavaScript query called buildComplianceReport, join the datasets by email address: The join produces a unified dataset showing each employee with their FutureLearn enrollment status, progress, and completion date. Employees not in the FutureLearn enrollments list are shown as 'Not Enrolled'. Employees with step_completion_percentage = 100 and fully_participated_at populated are shown as 'Completed'. Display the compliance view in a Table with a completion rate summary by department. Add a Chart showing completion percentage per department as horizontal bars — departments below 80% compliance are highlighted in red for manager follow-up. For L&D teams managing compliance reporting across dozens of FutureLearn courses and thousands of employees, combining multiple data sources and building scheduled report exports, RapidDev's team can help architect the complete Retool solution.

compliance_report.js
1// JavaScript query: join HR employees with FutureLearn enrollments
2const employees = getEmployees.data;
3const enrollments = getEnrollments.data;
4
5// Build lookup map from FutureLearn data
6const enrollmentByEmail = {};
7enrollments.forEach(e => {
8 enrollmentByEmail[e.learner_id] = e;
9});
10
11// Join datasets
12const report = employees.map(emp => {
13 const enrollment = enrollmentByEmail[emp.email];
14 return {
15 name: emp.name,
16 email: emp.email,
17 department: emp.department,
18 manager: emp.manager_name,
19 enrolled: !!enrollment,
20 progress: enrollment ? enrollment.progress : '0%',
21 status: enrollment ? enrollment.status : 'Not Enrolled',
22 completed_at: enrollment ? enrollment.completed_at : '',
23 has_certificate: enrollment ? enrollment.has_certificate : false
24 };
25});
26
27// Summary by department
28const deptSummary = {};
29report.forEach(r => {
30 if (!deptSummary[r.department]) deptSummary[r.department] = { total: 0, completed: 0 };
31 deptSummary[r.department].total++;
32 if (r.status === 'Completed') deptSummary[r.department].completed++;
33});
34
35return { report, deptSummary };

Pro tip: If FutureLearn returns anonymized learner identifiers instead of emails, you can still match records if your partner agreement includes a learner_identifier mapping. Ask your FutureLearn partner manager about the 'Learner Data Export' feature that provides the email-to-identifier mapping.

Expected result: A compliance report Table shows all employees with their FutureLearn enrollment status, progress, and completion. A department summary chart highlights teams below compliance thresholds.

Common use cases

Build an employee training compliance dashboard

Create a Retool dashboard that joins FutureLearn completion data with your internal HR database. Show each employee's enrollment status, progress percentage, and completion date for required training courses. Filter by department and manager to identify teams with low completion rates and generate compliance reports for audits.

Retool Prompt

Build a Retool training compliance dashboard. Fetch FutureLearn enrollments from the Partner API and join with employee records from our PostgreSQL database (matching by email). Show: employee name, department, manager, course name, enrollment date, progress percentage, and completion status. Add filters by department and completion status. Show a bar chart of completion rate by department.

Copy this prompt to try it in Retool

Build a course performance and drop-off analytics panel

Build a Retool panel that shows enrollment trends, step completion rates, and learner drop-off points for each FutureLearn course your organization runs. Identify which course steps have the highest abandonment rates so course authors can improve content at those specific points.

Retool Prompt

Build a Retool course analytics panel. For each FutureLearn course, show: total enrolled, active learners (progress >0% in last 7 days), completion rate, and certificate count. When a course is selected, show a step-level completion funnel chart showing what percentage of learners completed each step. Highlight steps where >30% of learners stopped.

Copy this prompt to try it in Retool

Build a learner progress monitoring tool

Create a Retool tool showing individual learner progress across all enrolled FutureLearn courses. L&D managers can search for a specific employee, see all their enrollments with progress percentages, and send a nudge email to learners who haven't logged activity in the past week.

Retool Prompt

Build a Retool learner progress monitor. Show a searchable Table of all enrolled learners with their name, email, enrolled courses count, average progress across all courses, and last activity date. Clicking a learner shows all their individual course enrollments with step-level progress. Add a Send Reminder button that triggers a follow-up for learners with no activity in 7+ days.

Copy this prompt to try it in Retool

Troubleshooting

401 Unauthorized when querying FutureLearn Partner API endpoints

Cause: The OAuth 2.0 access token has expired or was not generated correctly. FutureLearn OAuth tokens are time-limited and require refresh using the client credentials flow.

Solution: Request a fresh access token via POST https://www.futurelearn.com/oauth/token with body: grant_type=client_credentials&client_id=YOUR_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET. Update the FUTURELEARN_ACCESS_TOKEN configuration variable in Retool Settings → Configuration Variables with the new token. For ongoing operation, create a Retool Workflow that refreshes the token on a schedule before it expires.

typescript
1// Token refresh request body (form-encoded):
2// grant_type=client_credentials
3// &client_id=YOUR_CLIENT_ID
4// &client_secret=YOUR_CLIENT_SECRET
5// Send as Content-Type: application/x-www-form-urlencoded

GET /api/v1-partner/runs returns 403 Forbidden

Cause: Your FutureLearn account does not have Partner API access enabled, or the API credentials provided do not have the required permissions for your organization's courses.

Solution: Verify your partner tier with your FutureLearn account manager. Partner API access is not available to standard learner or instructor accounts — it requires a formal partner or enterprise agreement. If you have a partner agreement but still get 403, confirm that the OAuth scopes requested include the partner read permissions.

Learner identifiers are hashed values instead of email addresses

Cause: FutureLearn anonymizes learner data by default in the Partner API to protect learner privacy. Your data sharing agreement may be configured for anonymized identifiers.

Solution: Contact your FutureLearn partner manager and request access to the enhanced data sharing tier. With proper agreement in place, FutureLearn can enable email-level learner identification in the API response, which is required for joining with your HR database. In the interim, you can use FutureLearn's CSV exports which may include the email-to-identifier mapping.

Enrollment step_completion_percentage shows 0 for all learners despite some completing the course

Cause: The completion percentage may not update in real-time — FutureLearn calculates these metrics periodically. The fully_participated_at field is the authoritative completion indicator, not step_completion_percentage.

Solution: Use fully_participated_at as the primary completion indicator. A non-null fully_participated_at means the learner has been marked as fully participating in the course regardless of the step_completion_percentage value. Cross-check against both fields: (step_completion_percentage >= 90 OR fully_participated_at IS NOT NULL) to catch all completed learners.

typescript
1// Completion check that uses both indicators:
2const isCompleted = !!enrollment.fully_participated_at ||
3 (enrollment.step_completion_percentage >= 90);

Best practices

  • Store FutureLearn OAuth credentials (client_id, client_secret, access_token) in Retool Configuration Variables marked as secret — never hardcode tokens in resource configurations.
  • Implement automated token refresh as a Retool Workflow on a schedule (every 50 minutes if tokens expire hourly) to prevent 401 errors during active use of the dashboard.
  • Use fully_participated_at as the authoritative completion indicator rather than step_completion_percentage alone — FutureLearn's backend marks this field when a learner meets all completion criteria.
  • Cache getCourseRuns for 10 minutes since the list of available course runs changes infrequently — this prevents redundant API calls every time the dashboard renders.
  • When joining FutureLearn data with HR records, use email as the join key only if your partner agreement provides email-level learner identifiers — check with your FutureLearn account manager before assuming email is available.
  • Filter enrollments to active runs (exclude archived runs with no recent activity) to keep dashboard queries fast — a large organization may have hundreds of completed historical course runs that slow down queries unnecessarily.
  • For compliance reporting exports, use Retool's CSV export feature on the compliance Table rather than building a separate export endpoint — this is simpler and covers most L&D reporting needs.
  • Separate the FutureLearn data fetch (getCourseRuns, getEnrollments) from the HR join logic (buildComplianceReport JavaScript query) so you can refresh each independently — FutureLearn data updates slowly while HR records may need more frequent refresh.

Alternatives

Frequently asked questions

Does Retool have a native FutureLearn connector?

No, Retool does not have a dedicated native connector for FutureLearn. You connect via a REST API Resource using FutureLearn's Partner API OAuth 2.0 credentials. The setup takes about 25 minutes and provides access to course runs, enrollment data, learner progress, and step completion statistics for courses your organization manages through FutureLearn.

Do I need a special FutureLearn account to use their API?

Yes. FutureLearn's Partner API is only available to organizations with a formal partner or enterprise agreement — not standard learner or free instructor accounts. If your organization publishes courses on FutureLearn or has a corporate learning agreement, contact your FutureLearn account manager at partners@futurelearn.com to request Partner API credentials.

Can I see individual learner email addresses in the FutureLearn API?

It depends on your data sharing agreement with FutureLearn. By default, the Partner API provides anonymized learner identifiers to protect learner privacy. Organizations with enhanced data sharing agreements can receive email-level identifiers, which enables joining FutureLearn data with internal HR systems. Contact your FutureLearn partner manager to discuss your data access tier.

How often does FutureLearn update enrollment and progress data?

FutureLearn progress data (step completions, fully_participated_at) is updated periodically rather than in real-time. For operational dashboards, expect data to be 1–4 hours behind learner activity. For compliance reporting where accuracy matters more than latency, this delay is typically acceptable. Cache your FutureLearn API queries for at least 30 minutes to reduce API load without losing data freshness.

Can I enroll employees in FutureLearn courses programmatically from Retool?

Enrollment management via API depends on your FutureLearn partner tier. Some enterprise agreements include write access to create enrollments programmatically. If your agreement supports it, use POST /api/v1-partner/runs/{run_id}/enrollments with the learner's email. Verify with your FutureLearn account manager whether your tier includes enrollment API write access before building enrollment workflows in Retool.

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 Retool 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.