Complete guide to the HaloPSA and Pennylane integration: installation, configuration, and best practices for automating your financial workflows.

This guide walks you through setting up the HaloPSA × Pennylane integration: what to prepare on each side, how to connect them, and how to run your first sync. For what the integration does and what it costs, see the Halo × Pennylane integration page.
Once it's set up, the integration runs on its own: clients, items, quotes and invoices you save in HaloPSA reach Pennylane within about a minute, and payments, quote decisions and records created in Pennylane come back to HaloPSA every few minutes.
Halentra creates your integration tenant and invites you to it by email. Setup then takes five steps:
Create an API application, and check the statuses, items and tax codes the sync uses.
Enter the API application's credentials, then sign in to Pennylane and approve the access.
Tell the integration which HaloPSA statuses mean sent, accepted, declined, expired and invoiced.
Set the sync directions, customer emails and data range, and link records that already exist on both sides.
A bulk sync links and creates records on both sides. When it finishes, the ongoing sync starts by itself.
The Setup card at the top of your tenant's Settings page follows the same steps: it shows what's done, opens each step for you, and runs the first sync once everything above it is settled. Nothing syncs until then.
The integration reads and writes your billing records through the HaloPSA API. In HaloPSA, go to Configuration › Integrations › HaloPSA API, open View Applications, and add a new application:
Application Identity gives the integration an identity of its own, so it doesn't depend on any one person's account, and its changes are easy to tell apart from your team's.
On the application's Permissions tab, tick these:
Save the application and copy its Client ID and Client Secret for step 2.
You'll pick these in step 3, so make sure they exist in HaloPSA first:
Each item's tax code needs a rate Pennylane supports: 0%, 0.9%, 1.05%, 1.75%, 2.1%, 4%, 5%, 5.5%, 6%, 6.5%, 8.5%, 9.2%, 10%, 13%, 16%, 19.6% or 20%. A line with any other rate is sent at 20%, with a warning in the sync logs.
Pennylane also uses each client's billing address, VAT number, payment terms and accounts email. Check these on your main clients before the first sync.
To keep a client's quotes and invoices out of Pennylane, use HaloPSA's own excluded from invoice sync flag: the integration respects it.
On your tenant's Settings page, the Credentials section has a card for each system.
https://yourcompany.halopsa.com, with the client ID and secret from step 1. The integration checks the connection and creates the webhook in HaloPSA for you. Leave that webhook as it is: if it's disabled or deleted, changes made in HaloPSA stop reaching Pennylane.If HaloPSA shows Limited, the API application is missing some of the permissions above. Once connected, both connections are checked every hour, and you're told if one stops working.
Open HaloPSA statuses and defaults in the Sync rules section and fill in the eight values:
The two Sent statuses also decide when Pennylane emails your customers, if you turn that on in step 4.
Autofill suggests a status for each row whose name matches, such as "Accepted" or "Approved". Check the suggestions before saving.
Customers, products, quotes and invoices each sync both ways by default. Send a record type towards Pennylane only, bring it towards HaloPSA only, or switch it off.
In the same sheet, two switches hand sending over to Pennylane, so your customers get their quotes and invoices from Pennylane without anyone sending them by hand:
Both are off by default, and only work while that record type syncs towards Pennylane. Emails use your Pennylane email settings: invoices go to the client's accounts email in HaloPSA, and quotes to the quote's contact. A bulk sync never sends them, so turning them on doesn't email your customers about old documents.
Data range sets the date quotes and invoices are synced from, or keeps your whole history. Customers and products always sync in full. A narrow range is the safest way to check your setup on a first sync, and you can widen it later.
Existing records only matters if some customers or products already exist in both HaloPSA and Pennylane. The first sync links records with exactly the same name by itself. For names that differ, such as "Acme" in HaloPSA and "ACME SAS" in Pennylane, link them here first, or the sync creates a second copy. Auto-map by name links every exact match in one click, and Exclusions keeps records out of the sync altogether.
Click Run on the last step of the Setup card. The confirmation says what will change on each side; read it, then confirm.
The bulk sync goes through customers, products, quotes and invoices, in that order:
It takes from a few minutes for a small company to a few hours for a long history. You can follow it on the Sync logs page, or close the page and get an email when it's done. A bulk sync never emails your customers, even with customer emails turned on.
When it finishes, the Setup card goes away and the ongoing sync starts by itself. Every setting stays editable afterwards, and you can run a bulk sync again at any time, for example after linking records you missed or widening the data range.
The dashboard shows the latest syncs, how many records are linked, and this month's activity. A banner appears when something needs you, such as a connection that stopped working or failures to review.
Every record synced, skipped or failed appears in the Sync logs with its HaloPSA and Pennylane IDs and, for a failure, the reason. A record that fails is retried automatically before it's left as a failure.
You can also have the integration open a ticket in HaloPSA when a record still fails after its retries or a connection is lost, and choose which email notifications you receive.
Our in-depth setup guide, which comes with the integration, covers every setting and every message in the sync logs.
No. The integration creates it when you connect HaloPSA, and offers to recreate it if it's ever disabled or deleted.
To read your quote statuses, invoice statuses, item groups and taxes, which you pick from during setup. Besides its webhook, the integration only writes clients, items, quotes, invoices, credit notes and incident tickets.
No. You sign in to Pennylane and approve the access, using Pennylane's own authorization.
Yes. Set a recent data range for the first sync, check the result in Pennylane, then widen the range and run a bulk sync again. Keep in mind that synced invoices are finalized in Pennylane.
Yes. Turn on Send quotes via Pennylane or Send invoices via Pennylane, and Pennylane emails each quote or invoice when it reaches your Sent status in HaloPSA. Old documents synced by a bulk sync are never emailed.
Yes. Every setting stays editable. After linking records you missed or widening the data range, run a bulk sync again: records already linked are never created twice.
Changes made in Pennylane are caught up when you resume. Changes made in HaloPSA while paused aren't: save those records again in HaloPSA, or run a bulk sync.
Book a demo on your own setup, and we'll get your tenant ready.