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

How to Integrate Retool with Edmodo

Edmodo was shut down in September 2022. This guide covers migrating to active education platforms — Google Classroom, Canvas LMS, and Schoology — and connecting them to Retool via REST API Resources to build classroom management and student engagement dashboards that replace what Edmodo once provided.

What you'll learn

  • Why Edmodo was discontinued and what platforms provide equivalent functionality
  • How to configure Google Classroom API as a REST API Resource in Retool
  • How to query course lists, student rosters, and assignment submissions from Google Classroom
  • How to build a classroom management dashboard that surfaces student engagement metrics
  • How to evaluate Canvas LMS and Schoology as alternative integration targets based on your institution's platform
Book a free consultation
4.9Clutch rating
600+Happy partners
17+Countries served
190+Team members
Intermediate15 min read30 minutesOtherLast updated April 2026RapidDev Engineering Team
TL;DR

Edmodo was shut down in September 2022. This guide covers migrating to active education platforms — Google Classroom, Canvas LMS, and Schoology — and connecting them to Retool via REST API Resources to build classroom management and student engagement dashboards that replace what Edmodo once provided.

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

Migrating from Edmodo to Active Education Platforms in Retool

Edmodo was one of the early leaders in K-12 social learning, connecting teachers, students, and parents through a Facebook-like educational interface. At its peak, Edmodo served over 100 million registered users. In September 2022, the platform was shut down, citing changes in the educational technology landscape. Schools and districts that relied on Edmodo were directed to migrate to alternative platforms.

For teams building Retool-based education management dashboards, the equivalent functionality is now available through three primary platforms: Google Classroom (the most widely adopted successor, with free access for Google Workspace for Education accounts), Canvas LMS (popular in higher education and increasingly in K-12), and Schoology (strong in U.S. K-12 districts, acquired by PowerSchool). All three provide REST APIs that can be connected to Retool via REST API Resources, enabling the same types of dashboards — student rosters, assignment submission rates, engagement metrics, and grade views — that an Edmodo integration would have supported.

This guide focuses primarily on Google Classroom as the most accessible successor, with notes on connecting Canvas LMS and Schoology where the patterns differ. If your institution already uses one of these platforms, the Retool integration approach described here will work regardless of which migration path your school or district chose.

Integration method

REST API Resource

Edmodo's API is no longer active. The recommended migration path is connecting to Google Classroom API (OAuth 2.0 via service account), Schoology API (two-legged OAuth), or Canvas LMS API (Bearer token) as REST API Resources in Retool. Each alternative provides classroom management endpoints that support building education dashboards similar to what an Edmodo integration would have provided.

Prerequisites

  • A Google Workspace for Education account with Google Classroom enabled, or access to Canvas LMS or Schoology with API credentials
  • A Retool account (Cloud or self-hosted) with permission to create Resources
  • For Google Classroom: a Google Cloud project with the Classroom API enabled and a service account with domain-wide delegation, or an OAuth 2.0 client configured for your organization
  • For Canvas LMS: a Canvas API access token generated from your Canvas account settings
  • Basic familiarity with OAuth 2.0 concepts and Retool's query editor

Step-by-step guide

1

Understand the Edmodo shutdown and choose your migration target

Edmodo's service was completely shut down in September 2022. The platform's data was not automatically migrated to any successor — teachers and schools had to manually export their content and set up accounts on new platforms. If you are building a Retool dashboard that was previously designed to integrate with Edmodo, you will need to redirect it to whichever platform your school or district migrated to. The three most common Edmodo migration targets are: Google Classroom — the default choice for schools already using Google Workspace for Education. Google Classroom provides a REST API via the Google Classroom API v1, with OAuth 2.0 authentication. It covers courses, students, teachers, assignments (coursework), submissions, and announcements. Canvas LMS — widely used in higher education and increasingly in K-12 districts. Canvas provides a comprehensive REST API with Bearer token authentication (personal access tokens or OAuth). Schoology — popular in U.S. K-12 districts, now owned by PowerSchool. Schoology provides a two-legged OAuth API for accessing courses, groups, and grades. For the purposes of this guide, Google Classroom is the primary target as it requires only a Google Workspace for Education account with no additional licensing beyond what most schools already have. The API patterns described here can be adapted to Canvas or Schoology by substituting the base URL, authentication method, and endpoint paths.

Pro tip: Check with your IT department or district technology coordinator to confirm which platform replaced Edmodo in your institution before building the Retool integration — the API details differ significantly between platforms.

Expected result: You have confirmed which education platform your institution uses as an Edmodo replacement and have gathered the appropriate API credentials for that platform.

2

Configure Google Classroom API credentials

To connect Retool to Google Classroom, you need either a service account with domain-wide delegation (for server-to-server access to all courses in a Google Workspace domain) or an OAuth 2.0 client (for individual user access). For a school-wide Retool dashboard that an administrator uses, the service account approach is recommended. Go to console.cloud.google.com and create or select a Google Cloud project. Enable the Google Classroom API under APIs & Services → Library. Navigate to APIs & Services → Credentials → Create Credentials → Service Account. Give the service account a descriptive name like 'Retool Classroom Integration'. After creation, click the service account → Keys tab → Add Key → Create new key → JSON. Download the JSON key file securely. Now enable domain-wide delegation: in the Google Admin Console (admin.google.com), go to Security → Access and data control → API controls → Manage Domain Wide Delegation → Add new. Enter the service account's client ID (found in the JSON key file as 'client_id') and add the scopes: https://www.googleapis.com/auth/classroom.courses.readonly, https://www.googleapis.com/auth/classroom.rosters.readonly, https://www.googleapis.com/auth/classroom.coursework.students.readonly. For write access, add the corresponding non-readonly scopes. Once delegation is configured, you can generate Bearer tokens for any user in the domain by using the service account JSON key to sign a JWT and exchange it for an access token. In Retool, you will implement this token generation as a JavaScript query or use a shorter-lived token obtained via the OAuth Playground (oauth2.googleapis.com/tokeninfo) for initial testing.

google-classroom-config.json
1{
2 "base_url": "https://classroom.googleapis.com/v1",
3 "auth_type": "Bearer token (Google OAuth2 access token)",
4 "required_scopes": [
5 "https://www.googleapis.com/auth/classroom.courses.readonly",
6 "https://www.googleapis.com/auth/classroom.rosters.readonly",
7 "https://www.googleapis.com/auth/classroom.coursework.students.readonly"
8 ],
9 "token_endpoint": "https://oauth2.googleapis.com/token"
10}

Pro tip: Use the Google OAuth Playground (developers.google.com/oauthplayground) to quickly generate a short-lived access token for testing your Retool queries before setting up service account automation.

Expected result: A Google Cloud project with the Classroom API enabled, a service account with domain-wide delegation configured, and a Bearer token ready to test in Retool.

3

Create a REST API Resource for Google Classroom

In Retool, navigate to the Resources tab and click '+ Create new'. Select 'REST API' from the connector list. In the Name field, enter 'Google Classroom API'. For the Base URL, enter https://classroom.googleapis.com/v1. For Authentication, select 'Bearer token' and paste the Google OAuth 2.0 access token you obtained from the OAuth Playground or your service account flow. Add default headers: Content-Type set to application/json and Accept set to application/json. Click 'Save resource'. Note that Google OAuth access tokens expire after 1 hour. For a production Retool app, you need to automate token refresh using a Retool Workflow that runs a JavaScript block to generate a new token from your service account credentials and updates the resource configuration variable. Store the service account JSON key securely as a secret configuration variable (Settings → Configuration Variables → mark as secret) and reference it in the token refresh workflow. For Canvas LMS instead: create a REST API Resource with Base URL https://your-institution.instructure.com/api/v1, authentication set to Bearer token using your Canvas API access token from Account → Profile → New Access Token. For Schoology instead: the API uses two-legged OAuth 1.0, which requires signing requests similarly to the Duo Security pattern — create a REST API Resource with the base URL https://api.schoology.com/v1 and implement OAuth signing in JavaScript queries.

Pro tip: Google access tokens expire in 1 hour. For persistent Retool dashboards, store the refresh token or service account key in configuration variables and automate token renewal using a Retool Workflow on a 45-minute schedule.

Expected result: A saved REST API Resource named 'Google Classroom API' with the correct base URL and Bearer token authentication is available in Retool's Resources list.

4

Write queries to fetch courses and student rosters

With the resource configured, build the core data queries for your education dashboard. Create a getCourses query: Method GET, path /courses. Add URL parameters: courseStates set to ACTIVE to show only active courses, pageSize set to 50. Name this query getCourses. This returns a list of all courses accessible by the authenticated user (or all courses in the domain if using a service account with domain-wide delegation). Create a getStudents query: Method GET, path /courses/{{ coursesTable.selectedRow.id }}/students. Add pageSize set to 100. Name this query getStudents — this will fire when a course row is selected. Create a getCourseWork query: Method GET, path /courses/{{ coursesTable.selectedRow.id }}/courseWork. Add pageSize set to 30 and orderBy set to updateTime desc to get recent assignments first. Run each query to inspect the response structure. Google Classroom returns paginated responses with a nextPageToken field for pagination and a top-level array named courses, students, or courseWork depending on the endpoint. The course object includes id, name, section, descriptionHeading, courseState, ownerId, and a teacherFolder reference. Student objects include userId, profile.name, and profile.emailAddress. CourseWork objects include id, title, dueDate, dueTime, maxPoints, and workType.

query-config.json
1{
2 "method": "GET",
3 "path": "/courses",
4 "params": {
5 "courseStates": "ACTIVE",
6 "pageSize": "50"
7 }
8}

Pro tip: Google Classroom's service account access sees all courses in the domain. Add a teacherId filter parameter if you want to scope results to a specific teacher's courses: ?teacherId=the_teacher_user_id.

Expected result: The getCourses query returns a JSON object with a 'courses' array. The getStudents query returns a 'students' array for the selected course. Both display data in the query result panel.

5

Build the classroom management dashboard UI

With the queries working, construct the classroom management dashboard UI. Drag a Table component onto the canvas and set its Data source to a transformer on getCourses. Write a transformer that maps each course to a flat row with id, name, section, and courseState. Add a second Table below or to the right, set its Data source to a transformer on getStudents, and configure it to refresh when a course is selected in the first table. The getStudents query should have its trigger set to depend on coursesTable.selectedRow.id — set 'Run query on any component change that it depends on'. Add a Text component header showing 'Students in: {{ coursesTable.selectedRow.name || "Select a course" }}'. For assignment submission tracking, create a getSubmissions query: Method GET, path /courses/{{ coursesTable.selectedRow.id }}/courseWork/{{ courseWorkTable.selectedRow.id }}/studentSubmissions with pageSize set to 100. Add a third Table for submissions showing student name, submission state (TURNED_IN, RETURNED, CREATED, RECLAIMED_BY_STUDENT), late status, and assigned grade. Wire the three tables so clicking a course populates students and coursework, and clicking a coursework item shows submissions. For complex multi-platform dashboards integrating Google Classroom with Canvas or Schoology alongside internal SIS data, RapidDev's team can help architect the full solution.

transformer.js
1// Transformer: flatten Google Classroom course list
2const courses = data.courses || [];
3return courses.map(course => ({
4 id: course.id,
5 name: course.name,
6 section: course.section || 'No Section',
7 description: course.descriptionHeading || '',
8 state: course.courseState,
9 enrollment_code: course.enrollmentCode || 'N/A',
10 creation_time: course.creationTime
11 ? new Date(course.creationTime).toLocaleDateString()
12 : 'N/A',
13 update_time: course.updateTime
14 ? new Date(course.updateTime).toLocaleDateString()
15 : 'N/A'
16}));

Pro tip: Google Classroom returns ISO 8601 timestamps (e.g., '2024-09-15T14:30:00.000Z'). Pass them directly to new Date() — no Unix timestamp multiplication needed, unlike some other education APIs.

Expected result: The courses Table displays all active Google Classroom courses. Clicking a course populates the students table with enrolled students. The assignment and submission tables load data for the selected course and assignment.

Common use cases

Build a multi-course student engagement dashboard

Your district's curriculum coordinator needs to monitor student assignment completion rates and activity across all courses managed by a teacher cohort. A Retool app connects to Google Classroom's API, fetches all active courses and their associated student rosters, then queries submission status for recent assignments — displaying a Table with per-student completion rates and flagging students with multiple missing assignments.

Retool Prompt

Build a student engagement dashboard that lists all Google Classroom courses for a teacher, with columns for course name, section, number of enrolled students, and number of assignments due this week. Add a row click handler that expands to show individual student submission rates for the selected course, with visual indicators for missing assignments.

Copy this prompt to try it in Retool

Create a teacher workload and assignment tracking panel

School administrators need visibility into how many assignments are being created and graded across all teachers in a department. A Retool app queries Google Classroom coursework endpoints, aggregates assignment creation and grading activity by teacher, and presents a sortable table and bar chart showing workload distribution — helping administrators identify teachers who may need support or resources.

Retool Prompt

Build a teacher workload panel that queries all courses across a Google Workspace for Education domain, aggregates assignments by teacher, and displays a bar chart of assignments created per teacher over the last 30 days. Include a table with columns for teacher name, total courses, assignments created this month, and ungraded submission count.

Copy this prompt to try it in Retool

Build a parent communication log viewer

Your student services team needs to track which parents have been notified about academic concerns flagged in the learning management system. A Retool app pulls student roster data from the education platform, cross-references it with a communications log stored in an internal PostgreSQL database, and displays a unified view showing which students have open concerns and when parents were last contacted.

Retool Prompt

Build a parent communication tracker that queries Google Classroom student rosters for all active courses and joins with a PostgreSQL table of parent contact logs. Display a table with student name, course, current grade status, last parent contact date, and outstanding concerns. Add a button to log a new parent contact that writes to the PostgreSQL table.

Copy this prompt to try it in Retool

Troubleshooting

Google Classroom API returns 403 Forbidden with 'The caller does not have permission'

Cause: The service account does not have domain-wide delegation configured, or the OAuth scopes granted during delegation setup do not include the scope required for the specific API call.

Solution: In the Google Admin Console, navigate to Security → API controls → Manage Domain Wide Delegation and verify that your service account's client ID is listed with the correct scopes. Add any missing scopes (e.g., classroom.rosters.readonly for student queries). Allow a few minutes for domain-wide delegation changes to propagate before retesting.

Bearer token returns 401 after working initially

Cause: Google OAuth access tokens expire after 1 hour. The token pasted into the Retool resource during setup has expired.

Solution: For development/testing: use the Google OAuth Playground to generate a new short-lived access token and update the Retool resource. For production: implement token auto-refresh using a Retool Workflow that runs every 45 minutes to generate a new token from your service account credentials and update the configuration variable referenced by the resource.

Courses query returns empty array even though courses exist in Google Classroom

Cause: The authenticated user (or service account) does not have teacher or co-teacher access to any courses. Service accounts with domain-wide delegation impersonate a specific user — if that user is not a teacher in any active course, the courses list will be empty.

Solution: When using service account with domain-wide delegation, ensure the sub claim in the JWT specifies a Google Workspace user who is a teacher in the courses you want to access. Alternatively, impersonate a super-admin account that has visibility into all courses. Check the service account's impersonation target in your token generation code.

Canvas LMS or Schoology API returns CORS errors

Cause: CORS errors with Canvas or Schoology should not occur for Retool Resource Queries, as Retool proxies all resource requests server-side. If you see CORS errors, the request may be going through a JavaScript fetch() call in a custom component or inline JavaScript query rather than through the REST API Resource.

Solution: Ensure all API calls to Canvas or Schoology are made through Retool Resource Queries (not fetch() in JavaScript queries). Resource queries route through Retool's server-side proxy and do not experience CORS issues. Convert any fetch()-based queries to proper REST API Resource queries.

Best practices

  • Treat Edmodo as fully discontinued — do not attempt to reconnect to Edmodo endpoints, as the service is offline and any credentials are invalid. Build your Retool integration directly against Google Classroom, Canvas LMS, or Schoology based on your institution's active platform.
  • Store Google service account JSON key files as secret configuration variables in Retool, never in code or version control — the key provides domain-wide access to all classroom data in your Google Workspace instance.
  • Implement automatic OAuth token refresh using a Retool Workflow that runs every 45 minutes to ensure Google Classroom dashboards do not silently fail when the 1-hour access token expires.
  • Scope your Google Classroom API grants to read-only wherever possible — classroom.courses.readonly, classroom.rosters.readonly, classroom.coursework.students.readonly — and only add write scopes if your Retool app needs to create or modify assignments.
  • Use Retool's Permissions feature to restrict education dashboards to authorized staff — student data is sensitive and access should be limited to teachers, counselors, and administrators with a legitimate need.
  • For multi-platform environments where some schools use Google Classroom and others use Canvas, build the Retool app to support switching between API resources via a school/district selector, using conditional query logic based on the selected institution.
  • Test all API calls with a small sample course (a test course with fake student data) before connecting the dashboard to production courses with real student information.

Alternatives

Frequently asked questions

Can I still access Edmodo data or APIs?

No. Edmodo shut down completely in September 2022. The platform's APIs, user accounts, and content storage are no longer accessible. If you had data in Edmodo that was not exported before the shutdown, it is not recoverable through Edmodo's own systems. Contact your school district's IT department to determine if any data was archived before the shutdown.

Which platform is the best Edmodo replacement for building a Retool dashboard?

Google Classroom is the most accessible for schools already using Google Workspace for Education — it has a well-documented REST API, familiar OAuth authentication, and is free for education institutions. For richer LMS features, Canvas LMS provides a comprehensive API with Bearer token authentication. For K-12 districts with existing PowerSchool investments, Schoology (owned by PowerSchool) offers the tightest SIS integration.

Does the Google Classroom API require a paid Google Workspace account?

Google Classroom API access requires a Google Workspace for Education account (formerly G Suite for Education), which is free for qualifying schools and educational institutions. Personal Google accounts cannot access the Google Classroom API. Service account domain-wide delegation additionally requires Google Workspace admin access to configure.

Can Canvas LMS be connected to Retool without coding?

Yes. Canvas provides personal access tokens that work as Bearer tokens in a Retool REST API Resource — no custom code is needed for the basic connection. Navigate to your Canvas account → Profile → New Access Token, generate the token, and paste it into a Retool REST API Resource with base URL https://your-institution.instructure.com/api/v1. Most Canvas endpoints then work as standard GET/POST queries in Retool.

Can I build a student engagement dashboard that works across multiple platforms simultaneously?

Yes, but it requires separate API Resources for each platform (Google Classroom, Canvas, Schoology) and JavaScript transformers that normalize the different response schemas into a unified format. Create a common data model for courses, students, and assignments, then write per-platform transformers that map each platform's response fields to your common model. A Select component lets administrators choose which platform to view, or multiple Tables can display data from all platforms simultaneously if enrollment data allows it.

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.