What is Happening?
Intuit recently announced the introduction of a new SKU QuickBooks Online Advanced targeting mid market customers. We also recently shared the limits that will be applied to QuickBooks Online Plus and how it may impact your customers.
One of the capabilities that QuickBooks Online Advanced provides is the ability to create multiple custom fields. Following are the high level capabilities added for QuickBooks Online Advanced:
- Creation of up to 10 fields (Up from 3 on sales and 3 on purchase earlier)
- Custom field in Customers, Sales forms, Purchase Order (A field defined on one entity can be cross-used on other entities)
- Support multiple data types: String, Number, List, Data (vs String only earlier)
- Search by custom field value
- Full-featured Reporting on custom fields
How does this impact your app?
To understand the impact, let’s take a look at CustomField behavior that is currently supported using the API. While a detailed documentation of customer fields is available here, key features include:
- Creation of custom fields (up to 3 of String datatype) in QuickBooks Online user interface
- Manage/Read custom fields information using Preferences API
- Supply custom field information to the transaction using API
- Update value for custom fields in transactions using API
With QuickBooks Online Advanced, customers now have the ability to create up to 10 custom fields with various data types. In order to retain compatibility with app using custom fields, the first three String custom fields in QuickBooks Online Advanced will be available through the existing API functions outlined here.
- The mapping of the first three fields will be Immutable, i.e. even if the first three fields are marked inactive in QuickBooks Advanced, they will still continue to be mapped in the API response.
- If there are not enough String fields created in the QuickBooks Online Advanced(i.e.< 3 String fields), then unassigned fields will not map to any field.
The table below outlines how custom fields for QuickBooks Online Advanced will be mapped to API response for various use cases-
UseCase |
QuickBooks Advanced Custom Fields |
Preferences (Mapping) | Transaction (Mapping) |
3 String Custom Fields | Sales Rep (String)
Priority (String) Batch ID (String) |
SalesCustomName1 => Sales Rep
SalesCustomName2 => Priority SalesCustomName3 => Batch ID |
DefinitionId 1 => Sales Rep
DefinitionId 2 => Priority DefinitionId 3 => Batch ID |
4 String Custom Fields | Sales Rep (String)
Priority (String) Batch ID (String) Gift (String) |
SalesCustomName1 => Sales Rep SalesCustomName2 => Priority SalesCustomName3 =>Batch ID |
DefinitionId 1 => Sales Rep
DefinitionId 2 => Priority DefinitionId 3 => Batch ID |
2 String Custom Fields | Sales Rep (String)
Priority (String) |
SalesCustomName1 => Sales Rep SalesCustomName2 => Priority SalesCustomName3 => |
DefinitionId 1 => Sales Rep
DefinitionId 2 => Priority DefinitionId 3 => |
4 Custom Fields (1st one Date and rest String) | DeliveryDate (DATE)
Sales Rep (String) Priority (String) Batch ID (String) |
SalesCustomName1 => Sales Rep
SalesCustomName2 => Priority SalesCustomName3 =>Batch ID |
DefinitionId 1 => Sales Rep
DefinitionId 2 => Priority DefinitionId 3 =>Batch Number |
4 Custom Fields (2 Non-String and Two String) | DeliveryDate(DATE)
Sales Rep (String) Batch ID(NUMBER) Priority (String) |
SalesCustomName1 => Sales Rep
SalesCustomName2 => Priority SalesCustomName3 => |
DefinitionId 1 => Sales Rep
DefinitionId 2 => Priority DefinitionId 3 => |
3 Custom Fields ( ALL Non-String) | DeliveryDate(DATE)
Sales Rep (DROPDOWN) Batch ID(NUMBER) |
SalesCustomName1 =>
SalesCustomName2 => SalesCustomName3 => |
DefinitionId 1 =>
DefinitionId 2 => DefinitionId 3 => |
3 String Custom Fields (one Inactive, rest active) | Sales Rep (String) (INACTIVE)
Priority (String) Batch ID (String) |
SalesCustomName1 => Sales Rep(I)
SalesCustomName2 => Priority SalesCustomName3 =>Batch ID |
DefinitionId 1 => Sales Rep(I)
DefinitionId 2 => Priority DefinitionId 3 =>Batch ID |
4 String Custom Fields (Second Inactive, rest active) | Sales Rep (String)
Priority (String) (INACTIVE) Batch ID (String) Gift (String) |
SalesCustomName1 => Sales Rep
SalesCustomName2 => Priority(I) SalesCustomName3 =>Batch ID |
DefinitionId 1 => Sales RepDefinitionId 2 => Priority(I)
DefinitionId 3 =>Batch ID |
6 String Custom Fields (First three Inactive, and rest active) | Sales Rep (String)(I)
Priority (String) (I) Batch ID (String)(I) Gift (String) Associate (String) Gift (String) |
SalesCustomName1 => Sales Rep(I)
SalesCustomName2 => Priority(I) SalesCustomName3 =>Batch ID(I) |
DefinitionId 1 => Sales Rep(I)
DefinitionId 2 => Priority(I) DefinitionId 3=>Batch ID(I) |
Custom fields are not enabled in QBO. | SalesCustomName1 =>
SalesCustomName2 => SalesCustomName3 => |
DefinitionId 1 =>
DefinitionId 2 => DefinitionId 3 => |
Are apps expected to make any change to support custom fields for QuickBooks Advanced?
Based on the information above, at this time no changes are required from your app. You will continue to read and use custom fields information for the first 3 String based custom fields configured in QuickBooks Online Advanced.
You will continue to read and use custom fields information for the first 3 String based custom fields configured in QuickBooks Online Advanced. To retrieve these custom fields through V3 API, they must be enabled to all Sales forms or POs.
Are there any limitations 3rd party apps should be aware of?
As QuickBooks Online Advanced allows creation of up to 10 custom fields with various data types such as string, date, numeric, lists and API allows for only 3 String based fields, your app will only be able to support syncing data for 3 string custom fields. You will not be able to retrieve information for the rest of the custom fields at this time.
Have additional comments or questions? Share them on our developer forums!
Leave a Reply