How do I integrate custom software with Salesforce?
Start with the data model, not the connector
If your custom app, Salesforce, and QuickBooks all hold different versions of the same customer, invoice, or subscription, the integration will fail quietly before it fails loudly. The fix is usually not “find a better app”, it is deciding which system owns each record, then mapping only the fields that should move.
That matters most for QuickBooks sync for subscription billing, because recurring charges expose every weak spot in your data, tax rules, and status logic.
Direct sync or an integration layer?
A direct connection is fine when the workflow is simple, the record counts are modest, and one system clearly owns the business process. If you are pushing one-way updates, for example from Salesforce to QuickBooks, and the objects are stable, direct API integration can be the cleanest option.
Put an integration layer in between when any of these are true:
- Salesforce and QuickBooks both need to update the same customer or subscription
- You need retry logic, queueing, or replay after an outage
- Your custom software has its own billing rules, plan states, or tax logic
- You expect the workflow to expand to Xero, a portal, or a legacy system later
- You need an audit trail for who changed what and when
That layer does not have to be huge. Sometimes it is a small middleware service, sometimes an Azure Function or an app built in .NET that normalises records before they hit either system. The point is to stop every system talking to every other system in its own dialect.
Key takeaway: If more than one system can change the same billing record, you need a source of truth and usually an integration layer, not just a connector.
For Australian businesses, that decision often comes down to whether the accounting side is already locked to GST, BAS timing, and a particular chart of accounts. If QuickBooks is the finance ledger, let it own invoicing and payment status. If Salesforce is the customer system, let it own account lifecycle and sales stage. Do not let both “win”.
What breaks first in subscription billing sync
The first thing that usually breaks is not the invoice itself. It is the mapping around it.
In a QuickBooks sync for subscription billing, the common failure points are:
- customer duplication because one system uses email and the other uses account ID
- subscription status drift, where Salesforce says Active and QuickBooks says Overdue or Cancelled
- plan mismatch, especially when product names in Salesforce do not match item names in QuickBooks
- tax errors, usually around GST-inclusive versus GST-exclusive pricing
- discount handling, where one system stores a percentage and the other stores a fixed amount
- invoice timing, especially for proration, renewals, and mid-cycle upgrades
The status problem is the one that creates the most noise. A customer can be fully paid in QuickBooks but still look suspended in Salesforce because the webhook failed, the job was delayed, or the status mapping did not include “Partially Paid”. That is how finance ends up reconciling by hand at month end.
If you are already dealing with that kind of drift, the issue is rarely the connector alone. It is usually the underlying integration strategy. This is where a proper API integration strategy for growing Australian businesses pays off, because it forces you to define ownership, retry rules, and error handling before the first invoice ever syncs.
Clean the records before you automate them
You do not need perfect data, but you do need consistent data. If you push messy records into a sync, the integration will faithfully automate the mess.
Before building a QuickBooks sync for subscription billing, clean up:
-
Customer identity
- one unique customer ID per account
- no duplicate ABNs, emails, or trading names without a parent-child rule
- consistent naming for legal entity versus trading entity
-
Products and plans
- one canonical plan name per billable item
- clear mapping between Salesforce product records and QuickBooks items
- no free-text plan descriptions acting as the actual source of truth
-
Tax treatment
- GST rules documented for each product or service
- tax codes aligned between systems
- edge cases called out, such as exempt services or mixed invoices
-
Discounts and credits
- percentage discounts versus fixed credits defined separately
- refund rules documented
- proration logic agreed before implementation
-
Subscription status values
- a short, controlled list of states
- clear meaning for Trial, Active, Past Due, Suspended, Cancelled, and Archived
If you have years of spreadsheet history behind the records, do not skip the cleanup step. A lot of failed integration work is really failed data migration with a new interface. If that sounds familiar, this is worth reading alongside How Do I Migrate Spreadsheet Data Without Losing Anything?.
A practical rule: if your team cannot explain a field in one sentence, it is not ready to be synchronised.
Decide the source of truth before you build
When Salesforce and QuickBooks disagree, you need one answer, not a compromise.
Use this rule:
- Customer master data usually belongs in Salesforce if sales and account management own the relationship
- Invoice, payment, and tax records belong in QuickBooks if finance owns the ledger
- Subscription status should belong to the system that actually triggers billing, suspensions, and renewals
- Contract terms and commercial changes often belong in the custom app if that is where the subscription logic lives
That sounds straightforward until a customer changes plan mid-cycle, disputes a charge, or pays late. Then the question becomes which system is authoritative for each event, not just each record.
A clean pattern is this:
| Data type | Typical source of truth | Why | |---|---|---| | Customer profile | Salesforce | Sales and service teams need a single customer view | | Invoice number and tax | QuickBooks | Finance ledger and BAS reporting need integrity | | Subscription state | Custom app or billing engine | It knows the actual billing rules | | Payment status | QuickBooks | It reflects the accounting outcome | | Plan entitlements | Custom app | It controls what the customer can actually use |
If your business is in Australia and you are reporting GST, the accounting system usually needs the final say on invoice amounts and tax codes. That is not a technical preference, it is a finance control.
Check the fields that matter before you write code
The fastest way to waste a month is to build the sync before checking the field map.
For Salesforce integration and QuickBooks integration work, review these items first:
-
Custom fields
Which fields are truly needed in both systems, and which are local only? If a field only exists for reporting, it probably should not be part of the sync. -
Product plans
Do plan names match, or do you need a translation table? “Starter Monthly” in Salesforce and “SM-01” in QuickBooks will not sync cleanly without a mapping layer. -
Taxes
Are you using GST-inclusive or GST-exclusive pricing? Are there multiple tax codes? Are any services exempt or zero-rated? -
Discounts
Is the discount applied before tax or after tax? Is it stored as a line item, a header discount, or a credit note? -
Dates
Which date matters, invoice date, service period start, renewal date, or payment date? Billing disputes often start here. -
Identifiers
What is the stable key across systems, customer ID, subscription ID, invoice ID, and product SKU all need to be explicit.
If your custom software was built to support a specific workflow, this is where custom software integration earns its keep. Off-the-shelf connectors often handle the obvious fields and ignore the business rules that actually matter.
Off-the-shelf connector or custom integration?
Use a connector when the workflow is standard and you can live within its limits. Use custom integration when the business process is the product.
A connector is usually enough if:
- you only need basic customer and invoice sync
- the field mapping is simple
- there are no unusual tax or discount rules
- the sync is one-way or lightly bi-directional
- failures can be reviewed manually without much pain
You probably need custom integration if:
- your billing logic sits in a custom app
- Salesforce is part CRM, part operational workflow
- QuickBooks needs clean invoice lines, not just a lump sum
- you need event-based syncing, not scheduled batch jobs
- reconciliation errors are costing real time each month
- you are integrating existing systems that were never designed to meet
That last point matters. Legacy system integration is rarely about “can we connect them?” It is about whether the systems can agree on timing, identity, and ownership without turning finance into a cleanup crew.
If you are still deciding whether to buy, build, or adapt, a straight answer from How to Tell What’s Causing Integration Failures and 12 Signs Your Systems Need an Integration Audit will usually show you where the real cost sits.
Build the integration around failure, not just success
Most teams test the happy path and call it done. That is not enough for business system integration.
You need to test:
- duplicate customer creation
- invoice retry after API timeout
- webhook delay or missed event
- partial payment
- cancelled subscription with unpaid balance
- plan upgrade with proration
- GST code mismatch
- manual edit in QuickBooks after sync
A reliable integration has to decide what happens when one system changes and the other does not. Do you retry, queue, alert, or freeze the record? If you do not define that up front, your team will define it later in a spreadsheet.
For custom software integration projects, this is where integration services are worth the effort. Pierce Solutions builds on .NET, Blazor, and Azure, which suits this kind of workflow because you can centralise the logic, add auditability, and keep the sync behaviour explicit rather than hidden in a connector’s settings panel. They also work across Australian businesses in sectors where records have to stay clean, not just “mostly right”.
A useful precedent is the kind of setup work described in the Pierce Solutions case study for Michael Jones, where the team completed the full website and Microsoft 365 setup in under 24 hours and left the client with one bill and one point of contact. Different problem, same principle: reduce handoffs, reduce confusion, and make the system easier to run.
Common questions
Should I sync my custom app directly to Salesforce and QuickBooks, or use an integration layer?
Use an integration layer if both systems can change the same record, or if you need retries, audit logs, or future expansion. Direct sync is fine for simple one-way flows, but it gets fragile fast once subscription billing, tax, and status updates start crossing systems.
What usually breaks first in a QuickBooks sync for subscription billing?
Field mapping and status drift break first. Customer IDs, product plan names, GST treatment, and subscription states are where the first mismatches show up, not usually the invoice number itself.
How much cleanup do I need before the sync will work reliably?
Enough to make customer identity, plan names, tax codes, and discount rules consistent. If your team cannot explain a field in one sentence, clean it before you automate it.
Which system should win if Salesforce and QuickBooks disagree?
QuickBooks should usually win for invoices, payments, and tax records. Salesforce can own customer and account data, while the custom billing app should own subscription logic if that is where the rules live.
When is a connector enough, and when do I need custom integration?
A connector is enough for simple, mostly one-way sync with standard fields. If your billing rules are custom, your records are messy, or your finance team is doing manual reconciliation every month, you need custom integration.
Make the next step practical
Start by writing down three things: which system owns each record, which fields must sync, and what happens when the systems disagree. Then test those rules against one real subscription, not a mockup.
If you want the faster path, book Integration Services with Pierce Solutions. They handle custom software integration across Salesforce, QuickBooks, and other existing systems, so the sync is built around your actual workflow instead of forcing your workflow into a generic connector.