Conductor is a real-time, fully-typed API for QuickBooks Desktop (sometimes called QuickBooks Enterprise), available via Python, Node.js, TypeScript, and REST. In just a few lines, get real-time access to fetch, create, or update any QuickBooks Desktop object type and receive a fully-typed response. Check out the documentation to get started.
Conductor, the company, is building a data integration platform for vertical SaaS companies, starting with QuickBooks Desktop. Our team has spent over a decade building companies, scaling vast software systems, and obsessing over quality.
- Any data type: Query, create, or update any QuickBooks Desktop data type.
- Real-time: Get real-time updates on your QuickBooks Desktop data. No queues, no polling.
- Modern API: JSON-based REST API, replacing the old XML-based SOAP model.
- Typed client libraries: Fully typed libraries in Node.js and Python with autocomplete, inline docs, and type validation for endpoints, parameters, and responses.
- Request handling: Invisibly manages queues, timeouts, retries, and pagination.
- Multi-company support: Connects to multiple QuickBooks Desktop company files.
- Validation: Sanitizes and validates all inputs and outputs.
- Unified error handling: Streamlines error handling across the QuickBooks stack.
- Authentication flow UI: Simple UI for securely connecting QuickBooks Desktop accounts.
- Dashboard: UI to monitor and manage your QuickBooks Desktop connections and data.
- Error resolution: Detailed guides and instructions for resolving errors and handling edge cases.
This repository is a library for conveniently accessing Conductor's QuickBooks Desktop API from TypeScript or JavaScript. The library is a wrapper around the Conductor REST API, providing a fully-typed, easy-to-use interface for fetching, creating, and updating QuickBooks Desktop objects.
- A Conductor API key pair: one secret key, one publishable key. Please sign up to join the beta.
- Node.js v16 or later.
npm install conductor-node
# or
yarn add conductor-node
The full API documentation is available here along with many code examples. The following is a quickstart example:
import Conductor from "conductor-node";
const conductor = new Conductor("{{YOUR_SECRET_KEY}}");
async function main() {
// 1. Create a new EndUser.
const endUser = await conductor.endUsers.create({
companyName: "{{END_USER_COMPANY_NAME}}",
sourceId: "{{UNIQUE_ID_FROM_YOUR_DB}}",
email: "{{END_USER_EMAIL}}",
});
console.log("Save this EndUser ID to auth future requests:", endUser.id);
// 2. Create an AuthSession to establish the QuickBooks Desktop connection.
const authSession = await conductor.authSessions.create({
publishableKey: "{{YOUR_PUBLISHABLE_KEY}}",
endUserId: endUser.id,
});
console.log("Complete the QuickBooks Desktop auth:", authSession.authFlowUrl);
// 3. Get a list of invoices from this EndUser's QuickBooks Desktop.
const qbdInvoices = await conductor.qbd.customer.query(endUser.id, {
MaxReturned: 10,
});
console.log("QuickBooks Desktop invoices:", qbdInvoices);
}
main();
Please see our full documentation site for more docs, guides, and code examples.