Get Australian award pay rates in Google Sheets
Paste one short script into your sheet and use =ROSTERELF_RATE("Hospitality","Level 2","casual") to pull minimum and casual award rates into any cell. It reads our open award-rates dataset, so figures stay current with each 1 July update.
This tool returns indicative minimum award rates for general information only, drawn from the current Fair Work Ombudsman pay guides. RosterElf is not affiliated with, or endorsed by, the Fair Work Ombudsman. Rates depend on award coverage, classification, enterprise agreements and individual circumstances, and change periodically — do not rely on this tool for payroll or payment decisions, and always verify with the official Fair Work pay guide before setting or paying wages. This is not legal, payroll, tax or financial advice, and RosterElf Pty Ltd accepts no liability for any loss arising from reliance on it. It does not constitute legal, HR, or professional advice and should not be relied on as a substitute for advice specific to your business, workforce, or circumstances.
How to add award rates to Google Sheets
A one-time, four-step setup. No add-on to install — you paste a short script that adds a custom =ROSTERELF_RATE() function to your sheet.
- 1 In your Google Sheet, open Extensions → Apps Script. This opens the script editor bound to that specific sheet (custom functions only work in the sheet their script is attached to).
- 2 Select everything in the editor (Cmd/Ctrl + A), delete it, paste the script below, then click Save (the disk icon).
- 3 Pick ROSTERELF_RATE in the function dropdown and click Run once to authorise it (Review permissions → Advanced → Allow). It logs a "provide an award" error — that is expected; you are only granting the one-time permission to fetch data.
- 4 Back in the sheet, type
=ROSTERELF_RATE("Hospitality","Level 2","casual")in any cell. You should get a dollar figure straight away.
The script
/**
* RosterElf award rates - Google Sheets add-on.
* Reads the public dataset published by rosterelf.com (single source of truth =
* the award-rates data layer), so rates stay current with the 1-July refresh.
*/
var DATASET_URL = 'https://www.rosterelf.com/data/award-rates/index.json'
var CACHE_KEY = 'rosterelf_award_rates_v1'
var CACHE_TTL = 21600 // 6 hours
function fetchDataset_() {
var cache = CacheService.getScriptCache()
var cached = cache.get(CACHE_KEY)
if (cached) {
try {
return JSON.parse(Utilities.ungzip(Utilities.newBlob(Utilities.base64Decode(cached), 'application/x-gzip')).getDataAsString())
} catch (e) {
// Unreadable cache entry - fall through and refetch.
}
}
// The WAF blocks requests missing a User-Agent or Accept header; UrlFetchApp
// omits Accept by default, so set both explicitly.
var res = UrlFetchApp.fetch(DATASET_URL, {
muteHttpExceptions: true,
headers: { 'User-Agent': 'RosterElfSheets/1.0 (+https://www.rosterelf.com)', Accept: 'application/json' },
})
if (res.getResponseCode() !== 200) throw new Error('Could not load RosterElf award data (HTTP ' + res.getResponseCode() + ')')
var text = res.getContentText()
var data = JSON.parse(text)
// CacheService caps a value at 100 KB and the dataset is ~155 KB, so gzip it
// (compresses to ~25 KB). Caching is best-effort - never let it break the lookup.
try {
var packed = Utilities.base64Encode(Utilities.gzip(Utilities.newBlob(text)).getBytes())
if (packed.length < 100000) cache.put(CACHE_KEY, packed, CACHE_TTL)
} catch (e) {
// Ignore cache write failures.
}
return data
}
function norm_(s) {
return String(s || '')
.toLowerCase()
.replace(/[^a-z0-9]+/g, ' ')
.trim()
}
function findAward_(data, award) {
var q = norm_(award)
return data.awards.filter(function (x) {
return norm_(x.slug) === q || norm_(x.name).indexOf(q) >= 0 || (x.shortLabel && norm_(x.shortLabel).indexOf(q) >= 0) || norm_(x.code) === q
})[0]
}
/**
* Returns the 2026/27 minimum hourly rate for an Australian modern award classification.
* Indicative only - verify against the Fair Work pay guide before paying wages.
*
* @param {string} award Award name, short name, slug or code (e.g. Hospitality or MA000009).
* @param {string} level Classification label (e.g. Level 2).
* @param {string} type casual or permanent (default: permanent).
* @return The hourly rate.
* @customfunction
*/
function ROSTERELF_RATE(award, level, type) {
if (!award || !level) throw new Error('Provide an award and a classification level.')
var data = fetchDataset_()
var a = findAward_(data, award)
if (!a) throw new Error('Award not found: ' + award)
var q = norm_(level)
var c = a.classifications.filter(function (x) {
return norm_(x.label) === q || norm_(x.id) === q
})[0]
if (!c) {
var labels = a.classifications
.map(function (x) {
return x.label
})
.join(', ')
throw new Error('Classification not found: ' + level + '. Options: ' + labels)
}
var casual =
String(type || '')
.toLowerCase()
.indexOf('cas') >= 0
return casual ? c.hourlyCasual : c.hourlyPermanent
}
function onOpen() {
SpreadsheetApp.getUi().createMenu('RosterElf').addItem('How to use', 'showAbout_').addToUi()
}
function showAbout_() {
var lines = ['Insert a 2026/27 award rate with the custom function:', '', '=ROSTERELF_RATE(award, level, type)', '', 'Award = name, short name, slug or MA code. Type = casual or permanent.', '', 'Indicative minimums only - verify with Fair Work. Data: rosterelf.com/award-rates-dataset']
SpreadsheetApp.getUi().alert('RosterElf award rates', lines.join('\n'), SpreadsheetApp.getUi().ButtonSet.OK)
}
Example formulas
Pass the award as a name, short name, slug or Fair Work MA code, the classification level, and "casual" or "permanent" (permanent if omitted). Covered awards match the
award rate guides.
=ROSTERELF_RATE("Hospitality","Level 2","casual") Casual hourly rate for a Hospitality Award Level 2 employee.
=ROSTERELF_RATE("Retail","Level 1","permanent") Permanent (base) hourly rate for General Retail Award Level 1.
=ROSTERELF_RATE("MA000009","Level 3") Look up by Fair Work award code; type defaults to permanent.
=ROSTERELF_RATE("Fast Food","Level 1","casual") Casual base rate for a Fast Food Award Level 1 team member.
Formula recipes for pay models
Combine the function with ordinary spreadsheet formulas to build rosters, quotes and pay estimates. Put your inputs in columns and fill down.
Reference cells instead of hard-coding
=ROSTERELF_RATE(A2, B2, C2) Put the award in A2, the level in B2 and casual/permanent in C2, then fill the formula down a column so each row reads its own inputs.
Cost a shift (rate × hours)
=ROSTERELF_RATE(A2, B2, C2) * D2 Multiply the returned hourly rate by hours worked in D2 to get the base shift cost. Add penalties or loadings in the next column.
Compare casual vs permanent
=ROSTERELF_RATE(A2,B2,"casual") - ROSTERELF_RATE(A2,B2,"permanent") Show the casual loading in dollars per hour for the same classification — handy for weighing casual vs part-time.
Add super on top (12%)
=ROSTERELF_RATE(A2,B2,C2) * 1.12 Approximate the hourly cost including 12% superannuation. For a full on-cost breakdown use the payroll cost calculator.
Round to cents for display
=TEXT(ROSTERELF_RATE(A2,B2,C2), "$0.00") Wrap the result in TEXT to format it as currency in reports and quotes.
Guard against typos
=IFERROR(ROSTERELF_RATE(A2,B2,C2), "Check award / level") IFERROR catches an unknown award or classification so a bad input shows a friendly note instead of an error.
Need penalty, overtime or allowance rates too? Those live in the full award rate guides and the open dataset — or let award interpretation apply them to shifts automatically.
How it works
- The function reads our free award-rates dataset (JSON) over the web and caches it for a few hours.
- Rates refresh automatically each 1 July after the Fair Work Commission wage review — no need to re-paste the script.
- It returns the minimum permanent or casual hourly rate by classification. Figures match our award pay rate checker.
- Nothing you type is sent to RosterElf; the sheet only fetches the public rate file.
Troubleshooting
- #NAME? — the script isn't in this sheet. Add it via Extensions → Apps Script in the sheet you're using.
- Permission error — run the function once from the editor and accept the prompt (step 3).
- "Classification not found" — the error lists the valid levels for that award; copy one exactly.
- Prefer Excel? The same data is available as JSON and CSV on the dataset page for Power Query.
Indicative minimums only — always confirm against the current Fair Work pay guide before paying wages. Advising clients? See the accountant resource hub and partner program.
Apply these rates to your roster automatically
RosterElf's award interpretation applies the right base, casual, penalty and overtime rates to every shift, then sends payroll-ready totals to Xero and MYOB — no formulas to maintain.
Explore more free tools
Discover other calculators and AI tools to help manage your workforce.
AI employment contract generator
Generate draft employment contracts for casual, part-time, or full-time employees using AI.
AI roster generator
Generate draft staff rosters using AI based on your team size and shift requirements.
Modern award pay rate estimates
Get indicative pay rate estimates for common Australian awards. Verify with Fair Work.
Free roster builder
Build staff rosters instantly with our free drag-and-drop tool. No signup required.
Casual vs part-time calculator
Compare the estimated cost of casual vs part-time employment including loadings.
Payroll cost calculator
Estimate employee costs including super, leave, and casual loading.
Free invoice generator
Create and download professional tax invoices with GST and ABN details — no signup required.
Overtime & penalty rate calculator
Estimate shift costs including weekend, public holiday, and overtime rates.
Award rates in Google Sheets FAQs
-
No. You paste a short script into your own sheet once (Extensions → Apps Script). It reads our free open award-rates dataset over the web, so there is no add-on to install and the rates stay current with each 1 July update.
-
Open Extensions → Apps Script in your sheet, paste the script above, save, run it once to authorise, then type
=ROSTERELF_RATE("Hospitality","Level 2","casual")in a cell. The five-step setup is shown above. -
The award name, short name, slug or Fair Work MA code — for example “Hospitality”, “General Retail” or “MA000009”. The third argument is “casual” or “permanent” (permanent if omitted).
-
All 30 awards in our open dataset, with minimum (permanent) and casual hourly rates by classification level. For penalties, juniors, apprentices and allowances, see the full award rate guides.