
Track every drop.
The compliance data you're already required to track becomes the foundation of a professional operation.
// wtf_is_gaugr
Every distillery has to track stuff for the ATO: how much alcohol you made, what strength it was, how much excise duty you owe, whether you qualify for the $350k/year tax rebate.
Right now most small distilleries do this with spreadsheets, paper logs, or pray they don't get audited.
It's the operational system for your distillery — tracks production batches, fermentation, distillation, blending, inventory, vessels, transfers. All the daily ops stuff.
But because all that data flows through the system, when it's time to do your excise return, the numbers are already there. Accurate. With audit trails. Ready to export.
Distillery ops software that makes excise compliance not suck.
// ditch_the_spreadsheet
Most Australian craft distilleries track excise with Excel, a folder of receipts, and hope. Here's what that actually looks like vs. what it could look like.
Your spreadsheet
Your GAUGR dashboard
Duty rates changed
Did you update every formula?
Rates update automatically
ATO rates built in and maintained for you.
Audit trail?
Can you prove when you made that entry?
Tamper-proof audit log
Every change timestamped and hash-chained.
Laptop dies
Where are your records now?
Cloud-backed, always safe
Encrypted backups on Australian servers.
Quarterly return
How long does your PSP take to prepare?
PSP ready in 5 minutes
Data worksheet generated from your daily ops.
If you can use a spreadsheet, you can use GAUGR.
You know your product is good. But when someone asks a question, you're digging through files instead of pulling up an answer. That's not the impression you want to leave.
The ATO requires production logs, stock movements, and batch records. You're entering it anyway—might as well use it to run your operation like a professional.
Required for compliance
Same data makes you look like a pro
One system. Complete control. Professional operation.
Get your team using GAUGR for daily operations—logging production runs, tracking inventory, recording stock movements. The stuff they're doing anyway.
When PSP deadline arrives? Your excise return is already done. Digitally sign it, print the data worksheet, hand it to your accountant. That's it. No late nights reconciling spreadsheets. No prayer sessions hoping the numbers match.
Input
Ferment
Batch tracking & yields
Ferment
Distill
Runs, ABV & LAL calcs
Distill
Barrels
Aging & location
Barrels
Stock
Movements & transfers
Stock
Counts
Physical stocktakes
Counts

Output
Duty
Auto calculation
Duty
Return
Print-ready worksheet
Return
Export
PDF & CSV
Export
Audit
Full compliance trail
Audit
Insights
Business intelligence
Insights
Input

Output
Production
Every run logged. Every batch tracked. Buying from Tarac or another wholesaler? We track purchased spirit intake too.
Barrels
Location, age, contents, history. When a buyer asks about that 5-year-old barrel, you pull it up in seconds.
Excise
Your PSP deadline isn't stressful—it's a 5-minute task. Print your data worksheet, or give your accountant their own GAUGR login and let them pull it directly.
Traceability
Tell the story of every bottle—whether you distilled it or bought it. Buyers are impressed. Auditors are satisfied.
Analytics
Production trends, yield analysis, remission usage—all the intel you need to run your operation like the serious business it is.
Security
Complete audit trail. Bank-level encryption. Australian data sovereignty. When the ATO asks, you have receipts for everything.
Early 2026 — Join the founding producers
One system for excise, production, and inventory.
Cancel anytime.
For solo distillers getting started
For growing craft distilleries
For multi-site operations
For groups & contract distillers
After your 60-day free trial, you'll be prompted to choose a plan. Your data stays safe—nothing is deleted. If you need more time, just reach out and we'll extend your trial.
Absolutely. Upgrade or downgrade anytime from your account settings. When upgrading, you'll get immediate access to new features. When downgrading, changes take effect at your next billing cycle.
No setup fees, ever. The price you see is the price you pay. Need help migrating existing data? It's free for Master Distiller customers, and competitively priced for everyone else.
We accept all major credit cards (Visa, Mastercard, Amex) and bank transfers for annual plans. All payments are processed securely through Stripe.
We use Stripe as our payment processor. Your card details go directly to Stripe—we never see, store, or have access to your actual payment information. We only receive what Stripe shares with us: confirmation of payment, last 4 digits for your reference, and billing contact details.
We take Australian Consumer Law seriously and will never try to impede a refund. Just cancel online, then email us at feedback@gaugr.au and we'll manually process the refund—no questions asked.
Your data is encrypted at rest and in transit using bank-level AES-256 encryption. We're hosted on Australian servers with SOC 2 compliant infrastructure. You own your data—export it anytime.
South Australia
Within 24 hours
Release schedule through 2026+
Builders shipping
Encrypted, audited, Australian hosted
Scalable & secure infrastructure
Auto-scaling database
// for_the_nerds
Purpose-built calculation engines with tamper-proof audit trails. Every number traceable, verifiable, and ATO-ready.
All ATO excise compliance calculations with full audit trails.
Legitimate loss calculations for ATO remission claims.
Financial calculations compliant with AASB 102.
Product safety calculations for Food Standards compliance.
Operational KPIs and production calculations.
// Incoming request
const body = await req.json();
// { volume: 500, abv: 40.0 }Every query scoped to distilleryId. Impossible to access other tenants.
Each audit entry links to previous. Tampering breaks the chain.
Full history preserved. Query any point in time.
Every calculation is hashed and linked. Any modification breaks the chain.
{
"calculation": "Excise Duty",
"timestamp": "2025-01-15T14:32:18.445Z",
"engine": "TCEngine v2.4.1",
"inputs": {
"volume": 500.00,
"abv": 40.0,
"dutyRate": 95.37
},
"formula": "LAL = 500 × 0.40 = 200.00",
"output": {
"lal": 200.00,
"dutyPayable": 19074.00
},
"hash": "sha256:a1b2c3d4e5f6...",
"previousHash": "sha256:9f8e7d6c5b4a..."
}Grouped by engine. Here's exactly what they do.
// Litres of Absolute Alcohol
function calculateLAL(volumeLitres: number, abv: number): number {
return volumeLitres * (abv / 100);
}
// Beer has a 1.15% ABV offset per ATO rules
function calculateBeerLAL(volumeLitres: number, abv: number): number {
return volumeLitres * ((abv - 1.15) / 100);
}// OIML R-22 polynomial coefficients for temperature correction
// Reference temperature: 20°C (Australian standard)
const TEMPERATURE_COMPENSATION_FACTOR = 0.00036; // per °C
function adjustVolumeForTemperature(
volumeLitres: number,
tempCelsius: number
): number {
const tempDiff = tempCelsius - 20;
const volumeAdjustmentFactor = 1 + (tempDiff * TEMPERATURE_COMPENSATION_FACTOR);
return volumeLitres / volumeAdjustmentFactor;
}// ATO requires truncation to 1 decimal place
// 40.19 → 40.1 (NOT 40.2)
// 40.95 → 40.9 (NOT 41.0)
export function truncateToOneDecimal(value: number): number {
return Math.trunc(value * 10) / 10;
}
// Critical: Sum precise values FIRST, then truncate
function aggregateLALsForATO(lalValues: number[]): number {
const preciseSum = lalValues.reduce((a, b) => a + b, 0);
return truncateToOneDecimal(preciseSum);
}// Duty = LALs × Current ATO Rate
// Remission applied up to $350k/year cap
function calculateDuty(
lals: number,
ratePerLAL: number,
remissionBalance: number
): DutyResult {
const grossDuty = lals * ratePerLAL;
const remissionApplied = Math.min(grossDuty, remissionBalance);
const netDuty = grossDuty - remissionApplied;
return { grossDuty, remissionApplied, netDuty };
}// When water is added to ethanol, volume SHRINKS
// Peak contraction ~4.5% at 50-55% ABV (molecular packing)
// Source: OIML R-22 / TTB Table 4
const CONTRACTION_FACTORS: Record<number, number> = {
0: 0.0, 20: 0.03, 40: 0.044,
50: 0.0455, // Peak contraction
60: 0.043, 80: 0.022, 100: 0.0,
};
// Linear interpolation for any ABV
export function getContractionFactor(abv: number): number {
const lowerAbv = Math.floor(abv / 5) * 5;
const upperAbv = lowerAbv + 5;
const fraction = (abv - lowerAbv) / 5;
return CONTRACTION_FACTORS[lowerAbv] +
(CONTRACTION_FACTORS[upperAbv] - CONTRACTION_FACTORS[lowerAbv]) * fraction;
}// Annual cap resets July 1 (Australian financial year)
export const REMISSION_ANNUAL_CAP = 350000;
const FINANCIAL_YEAR_START_MONTH = 6; // July (0-indexed)
export function getCurrentFinancialYear(date = new Date()): string {
const month = date.getMonth();
const year = date.getFullYear();
const fyStartYear = month < FINANCIAL_YEAR_START_MONTH ? year - 1 : year;
return `${fyStartYear}-${fyStartYear + 1}`;
}
export function calculateRemissionBalance(
transactions: { date: Date; amount: number }[]
): { remaining: number; utilizationPercent: number } {
const usedToDate = transactions.reduce((sum, t) => sum + t.amount, 0);
return {
remaining: Math.max(0, REMISSION_ANNUAL_CAP - usedToDate),
utilizationPercent: (usedToDate / REMISSION_ANNUAL_CAP) * 100,
};
}// Problem: Final ABV depends on volume, which depends on
// contraction, which depends on final ABV. We iterate.
export function calculateDilutionWithContraction(input: DilutionInput) {
const inputLals = volume * (abv / 100); // LALs preserved
let waterToAdd = naiveEstimate;
for (let i = 0; i < 20; i++) { // Newton-Raphson style
const theoreticalVolume = volume + waterToAdd;
const estimatedAbv = (inputLals / theoreticalVolume) * 100;
const contraction = getContractionFactor(estimatedAbv);
const actualVolume = theoreticalVolume * (1 - contraction);
const achievedAbv = (inputLals / actualVolume) * 100;
if (Math.abs(achievedAbv - targetAbv) < 0.005) break;
waterToAdd += (achievedAbv - targetAbv) * actualVolume / achievedAbv;
}
return { waterToAddLiters: waterToAdd, iterations: i };
}// Blended ABV = (Sum of LALs) / (Total Volume) × 100
function calculateBlendedAbv(components) {
const totalLals = components.reduce(
(sum, c) => sum + c.volumeLiters * (c.abvPercent / 100), 0
);
const totalVolume = components.reduce(
(sum, c) => sum + c.volumeLiters, 0
);
return totalVolume > 0 ? (totalLals / totalVolume) * 100 : 0;
}// International proof systems
const usProof = abv * 2; // US: ABV × 2
const ukProofSikes = abv * 1.75; // UK: ABV × 1.75
// OIML R-22 specific gravity polynomial (at 20°C)
const sg = 0.99823 - 0.11977*x - 0.07965*x² + 0.01017*x³;
// Mass percent from density (ethanol: 0.78934, water: 0.99823)
const massPercent = (ethanolMass / totalMass) * 100;// LAL Efficiency = (output LALs / input LALs) × 100
const washLals = washVolume * (washAbv / 100);
const spiritLals = spiritVolume * (spiritAbv / 100);
const efficiency = (spiritLals / washLals) * 100;
// Rating thresholds:
// ≥95% = excellent | ≥90% = good | ≥80% = average | <80% = poorTake the formulas. Build a spreadsheet. Wire up your own system.
But then you'd also need to:
This isn't a calculator. It's full production ops and excise duty software in one — built so you can focus on making great product, not wrestling with compliance.
Built for reliability
Next.js + TypeScript + Neon Postgres (serverless) + Australian data residency. Your data never leaves the country. 99.9% uptime SLA.
New reporting requirements, rate changes, digital lodgement options — we integrate them so you don't have to think about it.
Digital excise reporting doesn't exist yet in Australia. If government introduces it — like SBR for BAS — we'll integrate it so you can lodge directly from GAUGR.
Not retrofitted. Not adapted from overseas software. Built here, for Australian producers.
Questions? Email us at hello@gaugr.au