Connect New Expensify to Sage Intacct for comprehensive expense management with support for entities, dimensions, departments, classes, locations, projects, and custom fields.
Prerequisites
Before connecting to Sage Intacct, ensure you have:
Sage Intacct administrator access
Web Services enabled in Sage Intacct
User credentials with API access
Entity ID (for multi-entity organizations)
Setup
Navigate to Accounting
Go to Workspace Settings > Accounting and select Sage Intacct
Review Prerequisites
Review the prerequisites checklist
Enter Credentials
Provide your Sage Intacct company ID, user ID, password, and entity ID
Select Entity
Choose the Sage Intacct entity to connect (for multi-entity setups)
Configure Settings
Set up import and export preferences
Connection Flow
Sage Intacct supports reusing connections:
// Source: src/components/ConnectToSageIntacctFlow/index.tsx
function ConnectToSageIntacctFlow ({ policyID } : ConnectToSageIntacctFlowProps ) {
const hasPoliciesConnectedToSageIntacct = !! getAdminPoliciesConnectedToSageIntacct (). length ;
const [ policy ] = useOnyx ( ` ${ ONYXKEYS . COLLECTION . POLICY }${ policyID } ` );
const shouldGoToEnterCredentials = isAuthenticationError ( policy , CONST . POLICY . CONNECTIONS . NAME . SAGE_INTACCT );
useEffect (() => {
if ( shouldGoToEnterCredentials ) {
Navigation . navigate ( ROUTES . POLICY_ACCOUNTING_SAGE_INTACCT_ENTER_CREDENTIALS . getRoute ( policyID ));
return ;
}
if ( ! hasPoliciesConnectedToSageIntacct ) {
Navigation . navigate ( ROUTES . POLICY_ACCOUNTING_SAGE_INTACCT_PREREQUISITES . getRoute ( policyID ));
return ;
}
Navigation . navigate ( ROUTES . POLICY_ACCOUNTING_SAGE_INTACCT_EXISTING_CONNECTIONS . getRoute ( policyID ));
}, []);
}
If you’ve already connected a Sage Intacct account, you can reuse those credentials across multiple workspaces.
Import Settings
Configure what data to import from Sage Intacct:
// Source: src/pages/workspace/accounting/intacct/import/SageIntacctImportPage.tsx
const sageIntacctConfig = policy ?. connections ?. intacct ?. config ;
const isExpenseType = sageIntacctConfig ?. export . reimbursable === CONST . SAGE_INTACCT_REIMBURSABLE_EXPENSE_TYPE . EXPENSE_REPORT ;
Expense Types / Accounts
Depending on your export configuration:
Expense Types : Imported when exporting as Expense Reports
Account Types : Imported when exporting as other transaction types
// Source: src/pages/workspace/accounting/intacct/import/SageIntacctImportPage.tsx
< ToggleSettingOptionRow
title = { translate ( isExpenseType ? 'workspace.intacct.expenseTypes' : 'workspace.accounting.accounts' ) }
subtitle = { translate ( isExpenseType ? 'workspace.intacct.expenseTypesDescription' : 'workspace.intacct.accountTypesDescription' ) }
shouldPlaceSubtitleBelowSwitch
wrapperStyle = { [ styles . mv3 , styles . mh5 ] }
isActive
onToggle = { () => {} }
disabled
/>
Expense Types or Accounts are always imported and cannot be disabled. They serve as the base expense categories.
Billable
Enable billable tracking for client billing:
// Source: src/pages/workspace/accounting/intacct/import/SageIntacctImportPage.tsx
< ToggleSettingOptionRow
title = { translate ( 'common.billable' ) }
switchAccessibilityLabel = { translate ( 'common.billable' ) }
shouldPlaceSubtitleBelowSwitch
wrapperStyle = { [ styles . mv3 , styles . mh5 ] }
isActive = { sageIntacctConfig ?. mappings ?. syncItems ?? false }
onToggle = { () => updateSageIntacctBillable ( policyID , ! sageIntacctConfig ?. mappings ?. syncItems ) }
/>
Dimensions and Mappings
Configure Sage Intacct dimension mappings:
// Source: src/pages/workspace/accounting/intacct/import/SageIntacctImportPage.tsx
const mappingItems = Object . values ( CONST . SAGE_INTACCT_CONFIG . MAPPINGS ). map (( mapping ) => {
const menuItemTitleKey = getDisplayTypeTranslationKey ( sageIntacctConfig ?. mappings ?.[ mapping ]);
return {
description: Str . recapitalize ( translate ( 'workspace.intacct.mappingTitle' , { mappingName: mapping })),
action : () => Navigation . navigate ( ROUTES . POLICY_ACCOUNTING_SAGE_INTACCT_TOGGLE_MAPPINGS . getRoute ( policyID , mapping )),
title: menuItemTitleKey ? translate ( menuItemTitleKey ) : undefined ,
subscribedSettings: [ mapping ],
};
});
Mapping options include:
Departments : Organizational departments
Classes : Classification codes
Locations : Physical or cost center locations
Projects : Project tracking
Customers : Customer assignments
Vendors : Vendor tracking
Each mapping can be:
Employee Default : Use employee’s default dimension
Tag : Expense-level selection
Report Field : Report-level assignment
Not Imported : Skip the dimension
Tax
For organizations with tax solutions configured:
// Source: src/pages/workspace/accounting/intacct/import/SageIntacctImportPage.tsx
{ !! sageIntacctData ?. taxSolutionIDs && sageIntacctData ?. taxSolutionIDs ?. length > 0 && (
< MenuItemWithTopDescription
title = {
sageIntacctConfig ?. tax ?. syncTax
? sageIntacctConfig ?. tax ?. taxSolutionID || sageIntacctData ?. taxSolutionIDs ?. at ( 0 )
: translate ( 'workspace.accounting.notImported' )
}
description = { translate ( 'common.tax' ) }
shouldShowRightIcon
onPress = { () => Navigation . navigate ( ROUTES . POLICY_ACCOUNTING_SAGE_INTACCT_IMPORT_TAX . getRoute ( policyID )) }
/>
)}
Select which tax solution to use for expense tax tracking.
User-Defined Dimensions
Sage Intacct supports custom user-defined dimensions (UDD):
// Source: src/pages/workspace/accounting/intacct/import/SageIntacctImportPage.tsx
< MenuItemWithTopDescription
title = {
sageIntacctConfig ?. mappings ?. dimensions && sageIntacctConfig ?. mappings ?. dimensions ?. length > 0
? translate ( 'workspace.intacct.userDimensionsAdded' , { count: sageIntacctConfig ?. mappings ?. dimensions ?. length })
: undefined
}
description = { translate ( 'workspace.intacct.userDefinedDimensions' ) }
shouldShowRightIcon
onPress = { () => Navigation . navigate ( ROUTES . POLICY_ACCOUNTING_SAGE_INTACCT_USER_DIMENSIONS . getRoute ( policyID )) }
/>
Add User Dimension
Navigate to Import > User-Defined Dimensions
Select Dimension Type
Choose from available UDD types in your Sage Intacct instance
Configure Mapping
Set how the dimension maps to Expensify (tags or report fields)
Set Employee Defaults
Optionally configure employee-specific dimension defaults
Export Settings
Configure how expenses export to Sage Intacct:
// Source: src/pages/workspace/accounting/intacct/export/SageIntacctExportPage.tsx
const sections = [
{
description: translate ( 'workspace.sageIntacct.preferredExporter' ),
action : () => Navigation . navigate ( ROUTES . POLICY_ACCOUNTING_SAGE_INTACCT_PREFERRED_EXPORTER . getRoute ( policyID )),
title: exportConfig ?. exporter ,
subscribedSettings: [ CONST . SAGE_INTACCT_CONFIG . EXPORTER ],
},
{
description: translate ( 'workspace.sageIntacct.exportDate.label' ),
action : () => Navigation . navigate ( ROUTES . POLICY_ACCOUNTING_SAGE_INTACCT_EXPORT_DATE . getRoute ( policyID )),
title: exportConfig ?. exportDate ? translate ( `workspace.sageIntacct.exportDate.values. ${ exportConfig . exportDate } .label` ) : undefined ,
subscribedSettings: [ CONST . SAGE_INTACCT_CONFIG . EXPORT_DATE ],
},
{
description: translate ( 'workspace.accounting.exportOutOfPocket' ),
action : () => Navigation . navigate ( ROUTES . POLICY_ACCOUNTING_SAGE_INTACCT_REIMBURSABLE_EXPENSES . getRoute ( policyID )),
title: exportConfig ?. reimbursable ? translate ( `workspace.sageIntacct.reimbursableExpenses.values. ${ exportConfig . reimbursable } ` ) : undefined ,
subscribedSettings: [ CONST . SAGE_INTACCT_CONFIG . REIMBURSABLE , CONST . SAGE_INTACCT_CONFIG . REIMBURSABLE_VENDOR ],
},
{
description: translate ( 'workspace.accounting.exportCompanyCard' ),
action : () => Navigation . navigate ( ROUTES . POLICY_ACCOUNTING_SAGE_INTACCT_NON_REIMBURSABLE_EXPENSES . getRoute ( policyID )),
title: exportConfig ?. nonReimbursable ? translate ( `workspace.sageIntacct.nonReimbursableExpenses.values. ${ exportConfig . nonReimbursable } ` ) : undefined ,
subscribedSettings: [
CONST . SAGE_INTACCT_CONFIG . NON_REIMBURSABLE ,
CONST . SAGE_INTACCT_CONFIG . NON_REIMBURSABLE_ACCOUNT ,
exportConfig ?. nonReimbursable === CONST . SAGE_INTACCT_NON_REIMBURSABLE_EXPENSE_TYPE . VENDOR_BILL
? CONST . SAGE_INTACCT_CONFIG . NON_REIMBURSABLE_VENDOR
: CONST . SAGE_INTACCT_CONFIG . NON_REIMBURSABLE_CREDIT_CARD_VENDOR ,
],
},
];
Preferred Exporter
Select which workspace admin exports expenses to Sage Intacct.
Export Date
Choose the date for Sage Intacct transactions:
Date Created : When expense was created
Date Exported : When expense is exported
Date Submitted : When report was submitted
Reimbursable Expenses
Export out-of-pocket expenses as:
Expense Report : Standard employee expense reports
Vendor Bill : Accounts payable bills
Journal Entry : Direct accounting entries
Non-Reimbursable Expenses
Export company card expenses as:
Vendor Bill : Company card bills
Credit Card Charge : Direct credit card charges
Journal Entry : Accounting journal entries
Depending on the export type, configure:
Default Vendor : Vendor for non-employee expenses
Credit Card Account : Credit card account mapping
Advanced Settings
Configure automatic synchronization:
Sync frequency (hourly, daily, weekly)
What data to sync (categories, dimensions, employee records)
Error notifications
Choose between Cash or Accrual basis accounting for exports
Select the Sage Intacct account used for expense reimbursements
Entity Management
For multi-entity Sage Intacct organizations:
Select Entity : Choose the entity during connection setup
Entity-Specific Settings : Each workspace can connect to a different entity
Top-Level Access : Some features require top-level access
The current entity name displays in page headers:
// Source: src/pages/workspace/accounting/intacct/import/SageIntacctImportPage.tsx
< ConnectionLayout
headerTitle = "workspace.accounting.import"
headerSubtitle = { getCurrentSageIntacctEntityName ( policy , translate ( 'workspace.common.topLevel' )) }
/>
Card Reconciliation
Sage Intacct integration supports card reconciliation with auto-sync:
Automatically reconcile company card transactions
Match Expensify Card transactions to Sage Intacct
Configure reconciliation frequency and settings
Troubleshooting
Common Issues:
Authentication failed : Verify credentials and entity ID
Web Services disabled : Enable Web Services in Sage Intacct
Permission errors : Ensure user has API access and proper roles
Dimension sync errors : Check that dimensions exist and are active
Entity access issues : Verify you have access to the selected entity
If authentication fails:
Verify Company ID, User ID, and Password are correct
Check that Entity ID matches (for multi-entity orgs)
Ensure Web Services are enabled
Confirm user has Web Services permissions
Dimension Mapping Problems
For dimension-related issues:
Verify dimensions are active in Sage Intacct
Check employee dimension defaults
Ensure proper dimension permissions
Review dimension object definitions
If exports fail:
Check the preferred exporter has admin access
Verify export account mappings are correct
Ensure required dimensions are filled
Review Sage Intacct validation rules
Best Practices
Test Thoroughly : Use a Sage Intacct test company for initial setup
Document Mappings : Keep a record of dimension and account mappings
Regular Reviews : Periodically review dimension and mapping configurations
Employee Defaults : Set up employee dimension defaults in Sage Intacct
Monitor Sync Status : Check connection status regularly for errors
Coordinate with Finance : Work with your finance team on export settings
Support
For Sage Intacct integration assistance:
Contact Expensify Concierge for connection support
Work with your Sage Intacct administrator for permissions and setup
Refer to Sage Intacct documentation for platform-specific features