Contract Disputes & Debt Recovery Lawyers

Enforce Your Contracts & Recover What You’re Owed – Fast

Are you dealing with a breach of contract or customers who won’t pay their invoices? Such setbacks can put a serious strain on your business. Nearly 90% of Australian small businesses face late payment problems, but you don’t have to be one of them. Our legal team moves quickly to enforce your agreements and recover debts, so you can maintain a healthy cash flow and keep your operations on track.

Expert lawyers for breach of contract litigation in Sydney

We have extensive experience in contract law and debt recovery – from negotiating settlements out of court to obtaining judgments and enforcement orders when necessary. Our lawyers will first seek cost-effective solutions (such as strong demand letters or mediation) to compel payment without a lengthy court battle. But if a debtor refuses to cooperate, we won’t hesitate to take decisive legal action and fight hard for every dollar you’re owed in court.

Our Contract & Debt Dispute Services:

Breach of Contract Claims

We handle disputes arising from broken agreements – whether a supplier failed to deliver or a client violated a service contract. Our team will pursue damages or specific performance to make things right.

Debt Recovery Actions

From unpaid invoices to defaulted loans, we leverage all legal avenues – from formal demands to court proceedings – to recover the money owed to you as swiftly as possible.

Contract Enforcement & Remedies

Ensuring contractual obligations are fulfilled, including terminating contracts lawfully, enforcing personal guarantees, or seeking injunctions to prevent further breaches.

Judgment Enforcement

If you already have a court judgment against a debtor, we can step in to enforce it (through garnishee orders, property seizures or other means) so that a legal victory translates into actual payment.

With over 40 years of litigation success behind us, we know how to get results in contract and debt disputes. Our lawyers combine meticulous attention to detail with aggressive advocacy to maximize your recovery. We also keep you informed and in control throughout the process – you’ll know upfront what to expect in terms of timelines, costs and likely outcomes. You’ve worked hard for your revenue; let us work hard to make sure you receive it.

If someone isn’t honouring their deal with you, act now. Call 02 9232 8033 or

with our contract dispute lawyers today for no-obligation advice on recovering your losses.
We’ll help you turn broken promises into paid debts.

Call Us

Book a Lawyer

Send us an enquiry

or

Book a 15-minute consultation

- End", entire site, priority AFTER 8417. * * What it does: * 1. On load, reads gclid + utm_* from the URL and stores them in a * first-party cookie for 90 days (only overwrites gclid when a new one * is present, so a later organic visit does not wipe the paid click). * 2. Appends those params to every calendly.com link and to any inline * Calendly embed, so a completed booking carries them into Calendly and * onward to the RedRain integration. */ (function () { 'use strict'; var COOKIE = 'jm_attr'; var MAXAGE = 60 * 60 * 24 * 90; // 90 days var UTM_KEYS = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_content', 'utm_term']; function readCookie(name) { var m = document.cookie.match('(?:^|; )' + name + '=([^;]*)'); return m ? decodeURIComponent(m[1]) : ''; } function writeCookie(name, val) { document.cookie = name + '=' + encodeURIComponent(val) + '; path=/; max-age=' + MAXAGE + '; SameSite=Lax; Secure'; } // ---- 1. capture from URL, merge with stored ---- function capture() { var url = new URLSearchParams(window.location.search); var stored = {}; try { stored = JSON.parse(readCookie(COOKIE) || '{}'); } catch (e) { stored = {}; } var incomingGclid = url.get('gclid'); if (incomingGclid) { stored.gclid = incomingGclid; } // only overwrite on a fresh click UTM_KEYS.forEach(function (k) { var v = url.get(k); if (v) { stored[k] = v; } }); // if a gclid arrived but no utm_source, tag the source so RedRain is not blank if (incomingGclid && !stored.utm_source) { stored.utm_source = 'google'; stored.utm_medium = 'cpc'; } if (Object.keys(stored).length) { writeCookie(COOKIE, JSON.stringify(stored)); } return stored; } var attr = capture(); if (!attr || (!attr.gclid && !attr.utm_source)) { return; } // nothing to forward // ---- 2. build a query string for Calendly ---- function calendlyParams() { var p = new URLSearchParams(); UTM_KEYS.forEach(function (k) { if (attr[k]) { p.set(k, attr[k]); } }); // carry the raw gclid too. utm_content is the safe carrier RedRain can map // if its Calendly field mapping does not expose a native gclid slot. if (attr.gclid) { p.set('gclid', attr.gclid); if (!p.get('utm_content')) { p.set('utm_content', 'gclid:' + attr.gclid); } } return p.toString(); } function withParams(href) { if (!href || href.indexOf('calendly.com') === -1) { return href; } var qs = calendlyParams(); if (!qs) { return href; } // don't double-append if (href.indexOf('utm_source=') !== -1 || href.indexOf('gclid=') !== -1) { return href; } return href + (href.indexOf('?') === -1 ? '?' : '&') + qs; } // ---- 3a. rewrite anchor links (covers the popup/booking click path) ---- function rewriteLinks() { var links = document.querySelectorAll('a[href*="calendly.com"]'); for (var i = 0; i < links.length; i++) { var a = links[i]; if (a.getAttribute('data-jm-attr') === '1') { continue; } a.setAttribute('href', withParams(a.getAttribute('href'))); a.setAttribute('data-jm-attr', '1'); } } // ---- 3b. rewrite inline embeds. Must run before Calendly widget.js reads // data-url; if the widget already initialised, re-point and let it // re-read on next interaction. Most bookings go via the link path. ---- function rewriteEmbeds() { var w = document.querySelectorAll('.calendly-inline-widget[data-url]'); for (var i = 0; i < w.length; i++) { var el = w[i]; if (el.getAttribute('data-jm-attr') === '1') { continue; } el.setAttribute('data-url', withParams(el.getAttribute('data-url'))); el.setAttribute('data-jm-attr', '1'); } } function run() { rewriteLinks(); rewriteEmbeds(); } if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', run); } else { run(); } // catch links injected later (Elementor popups, lazy content) if (window.MutationObserver) { var mo = new MutationObserver(function () { rewriteLinks(); }); mo.observe(document.documentElement, { childList: true, subtree: true }); } })();