College GPA calculator
Get your credit-weighted college GPA on the 4.0 scale from course grades and credit hours: four courses adding up to 38.8 quality points over 11 credits give a 3.53. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
College grade point average on a United States transcript is a credit-hour weighted mean on the 4.0 scale. Registrars multiply each course grade by that course's credit hours, add the quality points, and divide by attempted credits so a four-credit lecture outvotes a one-credit seminar. Students, advisors, and scholarship offices search for a college GPA calculator when they already have numeric grades between 0 and 4 plus a list of credit hours—not an unweighted high-school average and not a ten-point CGPA conversion. This tool accepts those rows, rejects any negative credit hour and any grade outside 0 to 4, and returns the weighted GPA. Use it for planning and self-checks; always confirm the official figure on your transcript when a school uses a local plus-minus table or repeated-course replacement.
What a college GPA is and the credit-hour formula
A college grade point average on the United States 4.0 scale is a credit-hour weighted mean, not an unweighted average of courses. Each row on a transcript carries two numbers the registrar actually uses: a grade already expressed as grade points from 0.0 (F) through 4.0 (A), and the credit hours the course is worth. Quality points for that row equal grade times credits.
The term or cumulative GPA is the sum of quality points divided by the sum of attempted credit hours. That is why a four-credit organic chemistry lecture with a 3.0 outvotes a one-credit seminar with a 4.0: the lecture contributes twelve quality points and four credits, the seminar contributes four quality points and one credit, and the combined GPA is sixteen divided by five, or 3.2, not the 3.5 a naive two-course average would print.
High-school unweighted GPA calculators ignore credits on purpose because many secondary transcripts treat every course as one unit. Letter-grade GPA tools first map A, B, and C into the four-point table and then, if they weight at all, multiply. This college GPA calculator assumes you already have numeric grades on 0 to 4 and the credit hours next to them, which is the form most college portals, degree-audit exports, and midterm grade reports already show.
Grades outside 0 to 4 are rejected rather than silently clipped, because a 4.3 A+ or a 10-point CGPA is a different scale, not a college 4.0 row. Negative credit hours are rejected because they would invert the weighted mean.
Each row needs grade, a finite number on the closed interval from 0 through 4 inclusive, and credits, a finite number of credit hours that is not negative. An optional label holds the course name for display in the returned breakdown. The optional decimals field is an integer from 0 through 6 and defaults to 2; it controls rounding of the GPA and of the quality-point total.
At most eighty courses are accepted. Optional labels are omitted rather than returned as null. Example: Calculus I at 3.7 for 3 credits, General Chemistry at 4.0 for 4 credits, English Composition at 3.0 for 3 credits, and Physical Education at 2.7 for 1 credit yields 38.8 quality points over 11 credits, which rounds to a college GPA of 3.53 on the four-point scale.
Where a college GPA calculator earns its keep
Advising offices use a college GPA calculator when a student brings a mid-semester portal dump of numeric grades and credit hours and wants to know whether they are still on the dean's list, still in good standing, or still above a scholarship cutoff, without mixing in high-school unweighted figures or converting a 10-point CGPA. Financial-aid staff computing Satisfactory Academic Progress need the same credit-weighted mean the registrar prints, because attempted hours are the denominator of both GPA and pace.
Athletic academic coordinators check continuing-eligibility thresholds from a list of current-term grades and credits. Students planning a withdrawal want to see how dropping a low-grade four-credit course changes the average before they sign the form. Keep the 0-to-4 gate visible in your UI so a 4.3 or a percentage score is rejected instead of being treated as an A, pin the rounded gpa in tests, and you get reproducible college GPA figures for counseling widgets, LMS plugins, and edge workers.
This tool is educational and deterministic, not a substitute for the registrar's official computation when a college uses a local plus-minus table, repeated-course replacement, or institutional credits that do not enter GPA.
What you can do with it
Mid-semester standing and dean's list
Turn a portal dump of numeric 0–4 grades and credit hours into the same credit-weighted college GPA a registrar would print for standing checks.
Scholarships and academic-progress screens
Compute the attempted-hour weighted 4.0 average financial-aid and scholarship cutoffs use, without mixing unweighted high-school figures.
What-if withdrawals and load planning
See how dropping a low-grade four-credit course, or adding a one-credit elective, moves the credit-weighted GPA before you change the schedule.
FAQ
How is college GPA calculated from grades and credit hours?
Multiply each numeric grade on the 0–4 scale by that course's credit hours, add those quality points, and divide by the total attempted credits. A four-credit 3.0 outvotes a one-credit 4.0.
Can credit hours be zero or negative?
Negative credit hours are rejected. A zero-credit row is allowed and does not move the mean, but the total of credit hours must be greater than zero or there is no GPA to compute.
How is this different from an unweighted GPA calculator?
An unweighted tool treats every course as weight 1, often from letter grades. This college GPA calculator weights by credit hours and expects numeric grades already on 0 to 4.
What happens if I enter a grade above 4.0, like a 4.3 for an A+?
It is rejected instead of being cut down to 4.0, because a 4.3 scale or a ten-point scale is a different system. Convert those grades to the college 4.0 table first, then enter them with their credit hours.
Why might my result differ from the GPA on my transcript?
Your school may use its own plus-minus table or replace the grade of a repeated course, and this calculator does neither. Use it for planning and self-checks, and confirm the official figure on your transcript.
Related tools
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/edu/college-gpa \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"courses":[{"grade":3.7,"credits":3,"label":"Calculus I"},{"grade":4,"credits":4,"label":"General Chemistry"},{"grade":3,"credits":3,"label":"English Composition"},{"grade":2.7,"credits":1,"label":"Physical Education"}]}'const res = await fetch("https://api.kit.forhosting.com/edu/college-gpa", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"courses": [
{
"grade": 3.7,
"credits": 3,
"label": "Calculus I"
},
{
"grade": 4,
"credits": 4,
"label": "General Chemistry"
},
{
"grade": 3,
"credits": 3,
"label": "English Composition"
},
{
"grade": 2.7,
"credits": 1,
"label": "Physical Education"
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/edu/college-gpa",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"courses": [
{
"grade": 3.7,
"credits": 3,
"label": "Calculus I"
},
{
"grade": 4,
"credits": 4,
"label": "General Chemistry"
},
{
"grade": 3,
"credits": 3,
"label": "English Composition"
},
{
"grade": 2.7,
"credits": 1,
"label": "Physical Education"
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/edu/college-gpa", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"courses":[{"grade":3.7,"credits":3,"label":"Calculus I"},{"grade":4,"credits":4,"label":"General Chemistry"},{"grade":3,"credits":3,"label":"English Composition"},{"grade":2.7,"credits":1,"label":"Physical Education"}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"courses":[{"grade":3.7,"credits":3,"label":"Calculus I"},{"grade":4,"credits":4,"label":"General Chemistry"},{"grade":3,"credits":3,"label":"English Composition"},{"grade":2.7,"credits":1,"label":"Physical Education"}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/edu/college-gpa", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"courses": [
{
"grade": 3.7,
"credits": 3,
"label": "Calculus I"
},
{
"grade": 4,
"credits": 4,
"label": "General Chemistry"
},
{
"grade": 3,
"credits": 3,
"label": "English Composition"
},
{
"grade": 2.7,
"credits": 1,
"label": "Physical Education"
}
]
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "edu.college_gpa",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Limits
max_items | 80 |
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |
Technical notes
What a college GPA is and the credit-hour formula
The formula this endpoint applies is therefore the registrar identity: GPA equals the sum of grade times credits, divided by the total credits.
Input contract, response shape, and validation errors
POST a JSON body with the required field courses, a non-empty array of row objects. Aliases items, rows, and grades are accepted for the list so spreadsheet columns and older form names map without renaming; credit_hours and hours are accepted as aliases of credits. On success the body includes gpa (the rounded credit-weighted average), scale fixed at 4, total_credits, quality_points, course_count, decimals, weighting credit_hours, method college_weighted_4_0, a formula string, and a courses array echoing each index, grade, credits, quality_points, and label when one was supplied. Missing courses, an empty list, a non-array value, a grade below 0 or above 4, a negative credit hour, a non-finite number, a non-integer decimals value, a list longer than eighty rows, and a set of rows whose credits all sum to zero fail with invalid_input naming the field. Those failures are not billed.
Where a college GPA calculator earns its keep
Backend importers need the same pure function as an API so a CSV of grades and hours never silently applies equal course weights that the public page does not mention.
Technical questions
What happens if a grade is outside 0 to 4?
The task fails with invalid_input. This calculator stays on the closed 4.0 scale; a 4.3 A+, a 5.0 weighted mark, or a 10-point CGPA is a different conversion, not a college 4.0 row.
What does the college GPA calculator cost?
The browser tool is free. API requests use prepaid KIT balance at $0.002 per successful call; invalid input is not billed.