← Dispatch Pro

Connecting Xero

Push your finished invoices straight into your own books — dispatcher guide · QuickBooks · Sage

1. What the connection does

When you raise an invoice in Dispatch Pro, you can push it into Xero instead of retyping it. That's the whole feature.

What crossesDirection
Invoices you raised here — number, date, lines, tax, totalDispatch Pro → Xero
The contact needed to hang that invoice onDispatch Pro → Xero
Anything at all from your booksNever.

Push only. We do not sync, reconcile, or read your ledger. Invoices are created as ACCREC (a sales invoice owed to you) with tax-exclusive lines. Nothing moves until you connect and press push on a specific invoice.

If the Xero row in Settings → Accounting is greyed out, that switch is ours rather than yours — ask us where it stands.

2. What you need first

3. Registering your Xero app

Xero connections run under an app you register, so the developer relationship, the app name on the consent screen, and the ability to revoke it are all yours.

  1. Sign in at developer.xero.com and open My Apps.
  2. New app. Choose the Web app integration type, name it something your team will recognise on a consent screen, and give your company URL.
  3. Set the Redirect URI to exactly:

    https://app.pinnaclegrove.ca/auth/accounting/callback

    Xero requires an absolute URL and does not accept wildcards. The Accounting card in Settings shows the same URL for whichever address you're signed in to — copy it from there if it differs.
  4. Create the app, then open its Configuration and generate a client secret. Copy the Client id and the secret now — Xero shows a new secret once.
The mismatch that catches everyone. If the redirect URI in Xero isn't identical to the one above, the connection fails at the last step with a Xero error rather than a Dispatch Pro one. It's almost always a trailing slash or http instead of https.

We request three scopes and nothing else: offline_access (so the connection survives without sending you back to Xero every half hour), accounting.transactions and accounting.contacts. No payroll, no bank feeds, no read of your wider ledger.

4. Pasting the credentials

  1. Settings → Accounting, on the Xero row.
  2. Open Connect with your own Xero app.
  3. Paste the Client ID and Client secret, then Save credentials.

The secret is encrypted before it is stored and never shown again — the field goes blank and reads stored — type to replace. That's expected. To rotate it later, type the new one over the top; you don't need the old one.

Changing the client ID means connecting as a different application, so any existing connection has to be re-made and Dispatch Pro will say so. Rotating only the secret keeps the connection — Xero issued it to the id.

We never ask for your Xero username or password, and you should never give them to anyone who does. What you paste here identifies an application you created. On its own it cannot reach your books: the permission comes from you approving it on Xero's screen, and you can withdraw it in Xero at any time.

5. Connecting

  1. Press Connect on the Xero row.
  2. Xero asks you to sign in and pick the organisation to authorize. Choose carefully if you have more than one — that's the organisation the invoices land in.
  3. Allow access. You come back to Settings and the row reads connected.

Xero doesn't tell us which organisation you picked as part of the sign-in, so immediately afterwards we ask Xero directly and record it. If you authorize with no organisation selected, the connection is refused rather than saved pointing at nothing.

6. Tax rate and revenue account

Once connected the row grows two required fields. Fill both and press Save codes.

FieldWhat to enter
Tax code in XeroYour Xero tax type — the code, not the display name. For most BC carriers that's your GST-on-income type.
Revenue account in XeroThe account code from your chart of accounts that haulage revenue posts to — typically a four-digit sales code.
Neither is guessed. Xero posts every invoice line to an account at a tax rate. Dispatch Pro has no built-in rate and will not pick an account in your chart of accounts — a push with either missing is refused rather than sent somewhere wrong. A wrong account or rate becomes your filing problem, not ours.

7. Pushing an invoice

Raise the invoice as usual (Invoices tab), then push it. The status sits on the invoice:

StatusMeaning
queuedAccepted, waiting its turn. Retries on its own.
needs customerWe couldn't be sure which Xero contact this is. See §8.
pushedIt's in Xero, with Xero's own id recorded here.
failedXero refused it. Xero's own reason is shown on the invoice.

An invoice can only land once. Before creating anything we ask Xero whether an invoice with that number already exists — so a retry after a timeout or a dropped connection cannot mint a duplicate in your books.

8. Matching contacts

The first time you invoice a given customer we look for them in Xero by name. One obvious match is used. Several, or none, and the push stops at needs customer and asks you to pick — or to create the contact — rather than guessing. Your choice is remembered, so it's a once-per-customer question.

9. When it stops working

What you seeWhat to do
connection expired — reconnectXero's permission lapsed — it does after 60 days without a push, or if someone disconnected us in Xero. Press Connect again. Nothing is lost.
not switched on hereOurs to enable, not yours. Ask us where it stands.
A push failed mentioning tax or accountThe tax type or account code doesn't match one in Xero. Check both against Xero's own settings (§6).
The Xero screen errors on redirectRedirect URI mismatch — see the note in §3.
Invoices land in the wrong organisationYou authorized a different one. Disconnect, reconnect, and pick carefully.

10. Disconnecting

Disconnect stops further pushes immediately. It does not reach into Xero — invoices already pushed are yours and stay where they are. You can reconnect later.

You can also revoke Dispatch Pro from inside Xero; we'll show the connection as needing a reconnect the next time we try to use it.

Removing your app credentials deletes the stored secret. What we keep either way is the record of when the connection was made, changed, removed, and used — see Terms §15 and the Privacy Policy.