31 Countries · Bidirectional · Formula Transparent
Transparent grade conversion, GPA calculation, and in-depth education system guides for international students, admissions offices, and academic institutions worldwide.
Platform Capabilities
Built for students, administrators, and institutions who need reliable, explainable grade equivalency.
Official DAAD-approved formula for all conversions to Germany, with complete step-by-step derivation shown.
Every conversion result shows pass/fail status, performance classification, and contextual interpretation based on destination country rules.
All 31 countries are both source and destination. Any-to-any conversion pair is supported.
Long-form country guides covering degree structure, grading scales, GPA methods, passing marks, and international recognition.
Weighted GPA computation across 4.0, 4.3, 4.5, and 5.0 scales. Includes cumulative GPA tracking across semesters.
Available in 8 languages. Switch language from the header to access the full platform in your preferred language.
Tools / Grade Converter
Select source and destination countries, enter your grade, and receive a fully transparent conversion with formula breakdown.
| Grade Level | Source Scale | Destination Scale | Classification |
|---|
Tools / GPA Calculator
Calculate your GPA across multiple grading scales — 4.0, 4.3, 4.5, or 5.0. Add your courses, assign grades and credits, and get a full weighted breakdown instantly.
Enter your existing GPA and credit hours to calculate your new cumulative GPA including these courses.
Add your courses and click Calculate GPA to see your result.
Tools / Flashcard Study Tool
Paste your study notes or upload a text file — the tool automatically converts your content into interactive flip flashcards. No AI. Your content, structured your way.
Paste your notes and click Generate Flashcards to start studying.
Your content is parsed locally — nothing leaves your browser.
Developer Reference
Database design, conversion logic, and folder structure for building GradeScope.
-- ───────────────────────────────────────────── -- GradeScope: Core Database Schema -- ───────────────────────────────────────────── CREATE TABLE countries ( id UUID PRIMARY KEY, name VARCHAR(100) NOT NULL UNIQUE, iso_code CHAR(2) NOT NULL, scale_type VARCHAR(30), -- 'percentage','gpa','german','classification' min_grade DECIMAL(6,2), max_grade DECIMAL(6,2), passing_grade DECIMAL(6,2), grade_direction VARCHAR(4), -- 'asc' (higher=better) or 'desc' (lower=better) formula_type VARCHAR(30), -- 'linear','bavarian','classification' special_notes TEXT, created_at TIMESTAMP DEFAULT NOW() ); CREATE TABLE grade_classifications ( id UUID PRIMARY KEY, country_id UUID REFERENCES countries(id), label VARCHAR(100), -- e.g. 'First Class Honours' min_percent DECIMAL(6,2), max_percent DECIMAL(6,2), gpa_equivalent DECIMAL(4,2), sort_order INT ); CREATE TABLE conversion_overrides ( id UUID PRIMARY KEY, src_country_id UUID REFERENCES countries(id), dst_country_id UUID REFERENCES countries(id), formula_type VARCHAR(30), -- override formula for this specific pair notes TEXT ); CREATE TABLE conversion_log ( id UUID PRIMARY KEY, src_country_id UUID, dst_country_id UUID, input_grade DECIMAL(6,2), output_grade DECIMAL(6,2), formula_used VARCHAR(30), session_id UUID, created_at TIMESTAMP DEFAULT NOW() );
// ───────────────────────────────────────────── // GradeScope: Conversion Logic Architecture // ───────────────────────────────────────────── // 1. Normalize to percentage (0-100) function normalizeToPercent(grade, country) { if (country.scale_type === 'percentage') { return grade; // already 0-100 } if (country.grade_direction === 'desc') { // e.g. Germany 1.0=best, 4.0=pass, 5.0=fail return ((country.max_grade - grade) / (country.max_grade - country.min_grade)) * 100; } // linear ascending (e.g. Philippines 1.0=best handled separately) return ((grade - country.min_grade) / (country.max_grade - country.min_grade)) * 100; } // 2. Convert from percentage to destination scale function fromPercentToScale(pct, country) { if (country.formula_type === 'bavarian') { return applyBavarianFormula(pct, country); } if (country.formula_type === 'classification') { return applyClassification(pct, country); } // linear default return country.min_grade + ((pct / 100) * (country.max_grade - country.min_grade)); } // 3. Modified Bavarian Formula (Germany only) // Formula: Xd = 1 + 3 × ((Nmax − Nd) / (Nmax − Nmin)) // Xd = German grade | Nd = input grade | Nmax = source max | Nmin = source passing function applyBavarianFormula(inputGrade, srcCountry) { const Nd = inputGrade; const Nmax = srcCountry.max_grade; const Nmin = srcCountry.passing_grade; const Xd = 1 + 3 * ((Nmax - Nd) / (Nmax - Nmin)); return Math.min(4.0, Math.max(1.0, Math.round(Xd * 10) / 10)); } // 4. Classification mapping (UK / Ireland) function applyClassification(pct, country) { const classes = country.grade_classifications; return classes.find(c => pct >= c.min_percent && pct <= c.max_percent) || classes[classes.length - 1]; } // 5. Main entry point function convertGrade(grade, srcCountry, dstCountry) { const pct = normalizeToPercent(grade, srcCountry); const result = fromPercentToScale(pct, dstCountry); return { result, pct, formula: dstCountry.formula_type }; }
gradescope/ ├── frontend/ │ ├── public/ │ │ ├── index.html │ │ └── assets/ │ ├── src/ │ │ ├── pages/ │ │ │ ├── Home.jsx │ │ │ ├── tools/ │ │ │ │ ├── GradeConverter.jsx │ │ │ │ └── index.jsx ← tools directory │ │ │ └── blog/ │ │ │ ├── index.jsx ← country grid │ │ │ └── [country].jsx ← dynamic country pages │ │ ├── components/ │ │ │ ├── layout/ │ │ │ │ ├── Header.jsx │ │ │ │ ├── Footer.jsx │ │ │ │ └── NavDropdown.jsx │ │ │ ├── converter/ │ │ │ │ ├── CountrySelect.jsx │ │ │ │ ├── GradeInput.jsx │ │ │ │ ├── ResultDisplay.jsx │ │ │ │ ├── FormulaBlock.jsx │ │ │ │ ├── StepByStep.jsx │ │ │ │ └── ScaleTable.jsx │ │ │ └── blog/ │ │ │ ├── CountryCard.jsx │ │ │ └── CountryPage.jsx │ │ ├── lib/ │ │ │ ├── conversion/ │ │ │ │ ├── index.js ← main entry │ │ │ │ ├── linear.js │ │ │ │ ├── bavarian.js ← Germany only │ │ │ │ └── classification.js ← UK/Ireland │ │ │ └── countries/ │ │ │ ├── database.js ← all 29 countries │ │ │ └── scales/ │ │ │ ├── argentina.js │ │ │ ├── germany.js ← Bavarian config │ │ │ ├── uk.js ← classification config │ │ │ └── ... ← one file per country ├── backend/ ← API (Node/FastAPI) │ ├── routes/ │ │ ├── convert.js │ │ └── countries.js │ ├── services/ │ │ └── conversionEngine.js │ └── db/ │ └── migrations/ ├── content/ │ └── countries/ ← MDX blog content │ ├── argentina.mdx │ ├── germany.mdx │ └── ... ← one per country └── README.md
// ───────────────────────────────────────────── // GradeScope: Frontend Architecture Notes // ───────────────────────────────────────────── // Framework: Next.js (App Router) + Tailwind CSS // Blog: MDX with gray-matter frontmatter // Forms: React Hook Form + Zod validation // SEO: next/metadata per page // Route structure: / → Home page /tools → Tools index /tools/grade-converter → Conversion tool /tools/gpa-calculator → (future) /blog → Country grid /blog/[country] → Dynamic country page // SEO metadata per country page: export const metadata = { title: `${country} Grading System Explained | GradeScope`, description: `Grade scale, degree structure, passing marks, and conversion guide for ${country}.`, keywords: [country, 'grading system', 'grade conversion', 'academic equivalency'], openGraph: { type: 'article', ... } } // Country page structured data (JSON-LD): { "@type": "Article", "name": "Germany Grading System", "about": { "@type": "Country", "name": "Germany" } }
To eliminate confusion in international academic transitions by providing transparent, formula-driven grade conversions — not black-box guesses. Every result comes with a full explanation of the method used.
We support 31 countries and 961 conversion pairs. Whether you're converting a US GPA to a German note, a UK classification to an Australian percentage, or a Nigerian CGPA to a French mention — we've got you covered.
Every conversion shows the exact formula — Modified Bavarian, linear interpolation, or classification-based — so you always know how your grade was calculated.
We apply each destination country's actual passing threshold — not just a number, but a real academic verdict that matters for admissions and enrollment.
GradeScope is completely free to use. No subscriptions, no paywalls on core features. We believe academic tools should be accessible to every student worldwide.
Available in 8 languages including Arabic (RTL), Chinese, German, French, Spanish, Portuguese, and Turkish — so students can navigate in their own language.
"Grades should be a bridge, not a barrier. GradeScope exists to make sure your academic achievements are understood — wherever in the world you choose to go."
— THE GRADESCOPE TEAM
Get In Touch
Have a question, suggestion, or just want to say hi? Reach us directly on Instagram — we read every message.
Legal
Last updated: February 2026
Summary: GradeScope does not sell your data, does not use advertising trackers, and does not require an account to use the platform. This policy explains what limited data we may collect and why.
GradeScope ("we", "us", "our") is an international academic intelligence platform providing free grade conversion, GPA calculation, and education system information. You can reach us via Instagram at @grade_scope.
GradeScope is designed to work with minimal data collection. Specifically:
GradeScope does not use advertising cookies or third-party tracking cookies. We may use minimal functional cookies or browser local storage to remember your language preference. No personal profiles are built from your usage.
Any anonymous usage data collected is used solely to improve the platform — understanding which tools are used most, which countries are searched, and how to prioritise new features. This data is never sold, shared with third parties for commercial purposes, or used to build personal profiles.
GradeScope loads fonts from Google Fonts. Google's own privacy policy applies to those requests. We do not use Google Analytics, Facebook Pixel, or any other advertising or behavioural tracking tools. Our Contact page links to Instagram, which is governed by Meta's privacy policy.
GradeScope is intended for users aged 13 and above. We do not knowingly collect personal data from children under 13. If you believe a child has provided us with personal information, please contact us via Instagram and we will promptly address the concern.
Depending on your location, you may have rights under GDPR, CCPA, or other privacy laws regarding access to, correction, or deletion of your personal data. Since GradeScope collects virtually no personal data, there is typically nothing to access or delete. For any privacy-related requests, contact us at @grade_scope on Instagram.
We may update this Privacy Policy from time to time. When we do, we will update the "Last updated" date at the top of this page. We encourage you to review this policy periodically. Continued use of GradeScope after any changes constitutes your acceptance of the updated policy.
For any questions about this Privacy Policy or your data, please reach out to us on Instagram: @grade_scope