Ledger Link
Two-Way QuickBooks Online Sync for Seedly CRM
A two-way QuickBooks Online sync you can sell to every client on your Seedly CRM, without spending months inside Intuit's API building it yourself. One payment, full source code, no per-client fees. Each client sub-account connects its own QuickBooks company.
One payment. No subscription and no recurring fees.
Why Ledger Link
Why agencies resell it.
A paid upgrade you can sell tomorrow
Per-plan gating is built in, so accounting sync becomes a tier you charge for instead of a cost you absorb. Put it in front of every client you have and pay no per-client or per-connection fee.
Skip the months Intuit's API would cost you
Rotating refresh tokens, three-second acknowledgements, tax drift, payments that double count. Solved and covered by tests, instead of billed to you as development time and learned the hard way in a client's live books.
You get the source code, not a subscription
Full source, an installer and a setup guide, for one payment. Nothing to renew, no seat count, and no vendor between you and the clients you sell it to.
Features
What it does.
Every client's books stay separate
One QuickBooks Online company per client sub-account, so twenty clients stay twenty separate sets of books. Per-role permissions control who can see whose.
Invoices arrive complete
Sent invoices go over with your invoice number, your line descriptions, and each line mapped to the items already in their books. Tip, late fee and processing fee get their own lines instead of disappearing into the total.
The tax billed is the tax booked
Press Send and the invoice goes to QuickBooks first. It prices the sales tax from the customer’s address, the breakdown comes back named down to the district, and the invoice is re-priced before it is emailed.
Chasing stops the moment you are paid
A payment recorded in QuickBooks marks the invoice paid here, stops the overdue reminders, and fires your Customer Paid automations. Void it and the whole thing reverses, dunning included. A payment that came from QuickBooks is never pushed back out, so money cannot be double counted.
Nothing is written until you approve it
Preview mode is on by default and shows exactly what it will write before it writes anything. Anything ambiguous parks in a review queue instead of being guessed at, a daily sweep catches whatever a notification missed, and every accounting decision lands in the audit trail.
Sell it on to every client
Per-plan gating lets you offer it as a paid upgrade. It installs through the CRM's extension points, adds no new libraries to your stack, uninstalls to stock, and costs nothing to run: Intuit meters reads, not writes, and a busy 25 sub-account agency uses about 3% of the free tier.
US businesses only. Requires Seedly CRM v5.8.8 or later, and QuickBooks Online rather than Desktop.
Sales tax
The tax on the invoice is the tax in the books.
If QuickBooks cannot price the tax, Ledger Link does not send the invoice.
It stays a draft with a plain-English reason, and nothing reached the customer. An invoice is a bill, not an estimate: a wrong figure in a customer's hands cannot be taken back, and a send you retry in five minutes can.
That matters because the two systems do not agree on their own. Your CRM works out sales tax from a rate somebody typed. QuickBooks works it out from the customer's address and your client's nexus. They disagree, and you find out weeks later, from an accountant, on an invoice the customer has already paid.
You cannot fix that afterwards. Re-issuing a corrected, possibly higher invoice to your client's customer makes your client look incompetent.
So Ledger Link changes the order. Press Send and the invoice goes to QuickBooks first. QuickBooks prices the sales tax from the customer's address, the breakdown comes back with state, county, city and district each named, and the invoice is re-priced to match. Only then is it emailed.
The figure the customer is billed is the figure the books record.
- Still your call
- Deliberately charging a rate QuickBooks would not arrive at? Turn off "Let QuickBooks work out the tax" on that invoice.
- And it never gets in the way
- A sub-account with no QuickBooks connected invoices exactly as it always did, whatever Intuit is doing.
How It Works
How it works, in four steps.
Connect a client
Connect their QuickBooks Online company from their sub-account. 2FA is required, credentials are encrypted, and disconnecting revokes with Intuit.
Watch it in preview
Preview mode is on by default. See exactly what it would write to their books, before anything is written.
Turn it on
Contacts, invoices and payments sync both directions. A one-click kill switch per client is always there, and it keeps all the matching work.
Let it reconcile
A daily sweep catches anything a notification missed, and every accounting decision lands in the audit trail.
Why I built this

I have been helping small businesses with online marketing since 1999, and I bought Seedly for the same reason you did: I was tired of renting my business from someone else's platform.
I could have hacked something together for my own install and moved on. But every Seedly owner is going to hit this, and none of us should have to spend weeks or even months learning Intuit's API the hard way, alone, one at a time.
And it is the hard way. Intuit's API punishes guessing. Refresh tokens rotate about once a day, and the old one dies the instant the new one is issued. So if two things in your system try to refresh at the same moment, one kills the other's token and your client has to reconnect their books. That isn't in a tutorial. That's the kind of thing you learn once, badly.
So I built Ledger Link to be shared instead of kept. It's a one-time purchase, because I'm not going to sell you a subscription on the same day I tell you I bought this platform to stop paying subscriptions.
Notes from the build
What it took to get this right.
Why nobody had done it properly
Intuit's documentation is a JavaScript app that hands a blank page to anything but a real browser, so a lot of what is written about this API online is quoting docs nobody can actually read anymore. I read the real ones by hand and checked everything else against a live sandbox.
The three-second rule
Intuit gives you three seconds to acknowledge a notification, and it will not send the next one until you do. Get that wrong and one slow response stalls every event for every client you have connected. Most integrations discover that in production.
Verify, do not assume
I started from a written plan and checked every line of it against the actual codebase. Half the files it pointed at did not exist anymore. That set the tone for the whole build, and it is also why I will tell you exactly what this does not do.
The bug I am most glad I found first
The push and the write-back will feed each other if you let them. A payment goes out, comes back as a payment, goes out again. Now a payment that came from QuickBooks is never pushed back out, and there is a test making sure it stays that way.
What I cannot test
I cannot test this against your clients' books, and I am not going to pretend otherwise. So it shows you exactly what it is going to write before it writes it, parks anything ambiguous for a person to decide, and stops completely on one click. That is how you build for books you cannot see.
Pricing
One price. Everything included.
Buy Ledger Link once for $297. No subscriptions and no recurring fees.
One-time payment. No subscriptions. No renewals.
- One-time payment, no recurring fees
- Full source code, installer and setup guide
- Unlimited client sub-accounts
- Two-way sync for contacts, invoices and payments
- 685 automated tests, run on install
- Full audit trail on every accounting decision
- Per-plan gating, sell it as a paid upgrade
Secure checkout via Stripe. Your license key is emailed instantly.
FAQ
Questions, answered.
The full source code for the Ledger Link module, an installer and uninstaller, and a setup guide that walks you through the setup and the Intuit registration. It is a one-time purchase and it is yours. You provide your own Seedly CRM license and run your own install, the same as any other add-on.
