Redmine QuickBooks Online Plugin
A plugin for Redmine that integrates with QuickBooks Online (QBO) to automatically create Time Activity entries from billable hours logged on Issues.
When an Issue associated with a Customer is closed, the plugin generates corresponding Time Activities in QuickBooks based on the Redmine Time Entries recorded for that Issue.
Disclaimer
The core functionality is implemented, but the project is under active development.
The master branch may contain unstable changes.
For production deployments, use a tagged release.
Compatibility
| Plugin Version | Redmine Version |
|---|---|
| Version 2026.1.0+ | Redmine 6.1 |
| Version 2.0.0+ | Redmine 5 |
| Version 1.0.0+ | Redmine 4 |
| Version 0.8.1 | Redmine 3 |
Features
Issue Billing Integration
-
Assign a QuickBooks Customer to a Redmine Issue.
-
Optionally associate a QuickBooks Estimate with the Issue.
-
Automatically associates a QuickBooks Invoice with the Issue.
Automatic Time Activity Creation
When an Issue with an assigned Customer is closed:
-
A Time Activity is created in QuickBooks for each relevant Redmine Time Entry.
-
Time Entries are grouped by Activity name.
-
Activity names are used to dynamically match Items in QuickBooks.
-
If no matching Item exists, the activity is skipped.
-
Labor rates are determined by the associated QuickBooks Item.
Employee Mapping
Redmine Users can be mapped to QuickBooks Employees through the User Administration page.
This ensures Time Activities are recorded under the correct employee in QuickBooks.
Customer Management
The plugin provides basic Customer management:
-
Create Customers directly from Redmine
-
Search Customers by name or phone number
-
View and edit Customer information
Customers are synchronized with QuickBooks.
Webhook Support
The plugin listens for QuickBooks webhook events.
Supported automation:
Invoice Linking
Invoices containing an Issue reference (e.g. #123) automatically attach to the corresponding Issue.
Custom Field Synchronization
Invoice custom fields can be mapped to Issue custom fields.
Example use case:
-
Mileage In/Out recorded in Redmine
-
Automatically synchronized to the QuickBooks invoice.
Customer Synchronization
Customer records are automatically updated in the local database when changes occur in QuickBooks.
Plugin Hooks
The plugin exposes several hooks for extending functionality through companion plugins.
Example:
redmine_qbo_vehicles
Adds support for tracking customer vehicles associated with Issues.
Available hooks:
| Type | Hook |
|---|---|
| View Hook | :pdf_left, { issue: issue } |
| View Hook | :pdf_right, { issue: issue } |
| Hook | process_invoice_custom_fields, { issue: issue, invoice: invoice } |
| View Hook | :show_customer_view_right, { customer: customer } |
Prerequisites
Before installing the plugin:
- Create a QuickBooks developer account:
- Create an Intuit application to obtain:
-
Client ID
-
Client Secret
- Configure the QuickBooks webhook endpoint:
https://redmine.yourdomain.com/qbo/webhook
Installation
1. Clone the Plugin
Install the plugin into your Redmine plugins directory.
cd /path/to/redmine/plugins
git clone https://github.com/rickbarrette/redmine_qbo.git
cd redmine_qbo
git checkout
Use a tagged release for stability.
2. Install Dependencies
bundle install
Required for Redmine 6 / Rails 7 compatibility.
3. Run Database Migrations
bundle exec rake redmine:plugins:migrate RAILS_ENV=production
4. Restart Redmine
Restart your Redmine server so the plugin and hooks are loaded.
Configuration
- Navigate to:
Administration → Plugins → Configure
-
Enter your QuickBooks Client ID and Client Secret.
-
Save the configuration.
-
Click Authenticate to complete the OAuth connection with QuickBooks Online.
Once authentication succeeds, the plugin performs an initial synchronization.
User Mapping
Each Redmine user must be mapped to a QuickBooks Employee.
Navigate to:
Administration → Users
Then assign the corresponding QuickBooks Employee to each user.
Usage
To enable automatic billing:
-
Assign a Customer to an Issue.
-
Log billable time using Redmine Time Entries.
-
Close the Issue.
When the Issue is closed, the plugin automatically generates the corresponding Time Activity entries in QuickBooks Online.
After the initial synchronization, the plugin receives updates through Intuit webhooks.
Troubleshooting
Time Activities Not Created
Verify that:
-
The Issue has a Customer assigned
-
Time Entries exist for the Issue
-
Activity names match QuickBooks Item names
Webhooks Not Triggering
Ensure the QuickBooks webhook endpoint is reachable:
https://redmine.yourdomain.com/qbo/webhook
Also verify webhook configuration in the Intuit developer dashboard.
License
The MIT License (MIT)
Copyright (c) 2016 - 2026 Rick Barrette
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.