Sage Intacct
Enterprise financial management for mid-market companies
Sage Intacct
Connect to Sage Intacct for enterprise financial management including AR, AP, GL, and project accounting.
Overview
Sage Intacct is a cloud financial management platform. The integration supports:
- Customers - Customer master records
- Vendors - Vendor/supplier records
- Invoices (AR) - Accounts receivable invoices
- Bills (AP) - Accounts payable bills
- Payments - AR and AP payments
- Journal Entries - General ledger entries
- Accounts - Chart of accounts
- Projects - Project tracking and accounting
Prerequisites
- Sage Intacct subscription
- Web Services subscription enabled
- API credentials (Sender ID, Password)
- Session-based authentication configured
Authentication
Sage Intacct uses session-based XML-RPC authentication via Nango.
curl "http://localhost:3000/api/v1/connections/sage-intacct/auth-url" \
-H "x-api-key: YOUR_API_KEY"Available Actions
Customer Actions
getCustomer
Get customer by ID.
{
"action": "sage-intacct.getCustomer",
"config": {
"customerId": "{{input.customerId}}",
"fields": "*"
}
}createCustomer
Create a new customer.
{
"id": "create-customer",
"type": "action",
"action": "sage-intacct.createCustomer",
"config": {
"customerId": "CUST-{{input.accountNumber}}",
"name": "{{input.companyName}}",
"displayContact": {
"name": "{{input.contactName}}",
"printAs": "{{input.companyName}}",
"companyName": "{{input.companyName}}",
"phone": "{{input.phone}}",
"email": "{{input.email}}",
"address": {
"address1": "{{input.address.street}}",
"city": "{{input.address.city}}",
"state": "{{input.address.state}}",
"zip": "{{input.address.zip}}",
"country": "{{input.address.country}}"
}
},
"status": "active",
"paymentTerm": "Net 30",
"customerType": "{{input.customerType}}",
"currency": "USD",
"creditLimit": "{{input.creditLimit}}"
}
}Parameters:
| Field | Type | Required | Description |
|---|---|---|---|
customerId | string | No | Customer ID (auto-generated if blank) |
name | string | Yes | Customer name |
displayContact | object | No | Primary contact info |
status | string | No | active or inactive |
paymentTerm | string | No | Payment term name |
customerType | string | No | Customer classification |
currency | string | No | Default currency |
creditLimit | number | No | Credit limit amount |
updateCustomer
Update an existing customer.
{
"action": "sage-intacct.updateCustomer",
"config": {
"customerId": "{{input.customerId}}",
"name": "{{input.newName}}",
"creditLimit": "{{input.newCreditLimit}}"
}
}listCustomers
List customers with optional filters.
{
"action": "sage-intacct.listCustomers",
"config": {
"filter": "STATUS = 'active'",
"fields": "CUSTOMERID,NAME,TOTALDUE",
"pageSize": 100
}
}Vendor Actions
getVendor
Get vendor by ID.
{
"action": "sage-intacct.getVendor",
"config": {
"vendorId": "{{input.vendorId}}",
"fields": "*"
}
}createVendor
Create a new vendor.
{
"id": "create-vendor",
"type": "action",
"action": "sage-intacct.createVendor",
"config": {
"vendorId": "VEND-{{input.vendorNumber}}",
"name": "{{input.vendorName}}",
"displayContact": {
"name": "{{input.contactName}}",
"printAs": "{{input.vendorName}}",
"companyName": "{{input.vendorName}}",
"phone": "{{input.phone}}",
"email": "{{input.email}}",
"address": {
"address1": "{{input.address.street}}",
"city": "{{input.address.city}}",
"state": "{{input.address.state}}",
"zip": "{{input.address.zip}}",
"country": "{{input.address.country}}"
}
},
"status": "active",
"paymentTerm": "Net 30",
"vendorType": "{{input.vendorType}}",
"currency": "USD",
"taxId": "{{input.taxId}}",
"form1099Type": "MISC",
"form1099Box": "7"
}
}listVendors
List vendors.
{
"action": "sage-intacct.listVendors",
"config": {
"filter": "STATUS = 'active' AND VENDTYPE = 'Supplier'",
"pageSize": 100
}
}Invoice (AR) Actions
getInvoice
Get AR invoice by ID.
{
"action": "sage-intacct.getInvoice",
"config": {
"invoiceId": "{{input.invoiceId}}",
"fields": "*"
}
}createInvoice
Create an AR invoice.
{
"id": "create-invoice",
"type": "action",
"action": "sage-intacct.createInvoice",
"config": {
"customerId": "{{input.customerId}}",
"invoiceDate": "{{input.invoiceDate}}",
"dueDate": "{{input.dueDate}}",
"invoiceNumber": "INV-{{input.invoiceNumber}}",
"poNumber": "{{input.poNumber}}",
"description": "{{input.description}}",
"currency": "USD",
"lineItems": [
{
"accountNumber": "4000",
"amount": "{{input.items[0].amount}}",
"memo": "{{input.items[0].description}}",
"locationId": "{{input.locationId}}",
"departmentId": "{{input.departmentId}}",
"projectId": "{{input.projectId}}"
}
]
}
}Line Item Parameters:
| Field | Type | Description |
|---|---|---|
accountNumber | string | GL account number |
amount | number | Line amount |
memo | string | Line description |
locationId | string | Location dimension |
departmentId | string | Department dimension |
projectId | string | Project dimension |
customerId | string | Customer dimension |
itemId | string | Item ID |
quantity | number | Quantity |
price | number | Unit price |
postInvoice
Post an invoice.
{
"action": "sage-intacct.postInvoice",
"config": {
"invoiceId": "{{input.invoiceId}}"
}
}listInvoices
List AR invoices.
{
"action": "sage-intacct.listInvoices",
"config": {
"filter": "STATE = 'Posted' AND TOTALDUE > 0",
"fields": "RECORDNO,CUSTOMERID,TOTALENTERED,TOTALDUE,WHENCREATED",
"pageSize": 100
}
}Bill (AP) Actions
getBill
Get AP bill by ID.
{
"action": "sage-intacct.getBill",
"config": {
"billId": "{{input.billId}}",
"fields": "*"
}
}createBill
Create an AP bill.
{
"id": "create-bill",
"type": "action",
"action": "sage-intacct.createBill",
"config": {
"vendorId": "{{input.vendorId}}",
"billDate": "{{input.billDate}}",
"dueDate": "{{input.dueDate}}",
"billNumber": "{{input.vendorInvoiceNumber}}",
"vendorDocNumber": "{{input.vendorDocNumber}}",
"description": "{{input.description}}",
"currency": "USD",
"lineItems": [
{
"accountNumber": "6000",
"amount": "{{input.amount}}",
"memo": "{{input.description}}",
"locationId": "{{input.locationId}}",
"departmentId": "{{input.departmentId}}"
}
]
}
}listBills
List AP bills.
{
"action": "sage-intacct.listBills",
"config": {
"filter": "PAYMENTSTATUS = 'open'",
"pageSize": 100
}
}Payment Actions
createArPayment
Record an AR payment.
{
"id": "record-payment",
"type": "action",
"action": "sage-intacct.createArPayment",
"config": {
"customerId": "{{input.customerId}}",
"paymentMethod": "Check",
"receiptDate": "{{input.paymentDate}}",
"bankAccountId": "{{input.bankAccountId}}",
"referenceNumber": "{{input.checkNumber}}",
"invoices": [
{
"invoiceKey": "{{input.invoiceKey}}",
"amount": "{{input.paymentAmount}}"
}
]
}
}createApPayment
Create an AP payment.
{
"id": "pay-vendor",
"type": "action",
"action": "sage-intacct.createApPayment",
"config": {
"vendorId": "{{input.vendorId}}",
"paymentMethod": "ACH",
"paymentDate": "{{input.paymentDate}}",
"bankAccountId": "{{input.bankAccountId}}",
"documentNumber": "{{input.paymentRef}}",
"description": "Payment for bills",
"bills": [
{
"billKey": "{{input.billKey}}",
"amount": "{{input.paymentAmount}}"
}
]
}
}Journal Entry Actions
createJournalEntry
Create a journal entry.
{
"id": "create-je",
"type": "action",
"action": "sage-intacct.createJournalEntry",
"config": {
"journal": "GJ",
"batchDate": "{{input.entryDate}}",
"description": "{{input.description}}",
"reverseDate": "{{input.reversalDate}}",
"lines": [
{
"accountNumber": "1000",
"type": 1,
"amount": "{{input.debitAmount}}",
"description": "Debit entry",
"locationId": "{{input.locationId}}",
"departmentId": "{{input.departmentId}}"
},
{
"accountNumber": "2000",
"type": -1,
"amount": "{{input.creditAmount}}",
"description": "Credit entry",
"locationId": "{{input.locationId}}",
"departmentId": "{{input.departmentId}}"
}
]
}
}Line Type Values:
1= Debit-1= Credit
listJournalEntries
List journal entries.
{
"action": "sage-intacct.listJournalEntries",
"config": {
"filter": "JOURNAL = 'GJ' AND BATCH_DATE >= '01/01/2024'",
"pageSize": 100
}
}Account Actions
getAccount
Get GL account.
{
"action": "sage-intacct.getAccount",
"config": {
"accountNo": "{{input.accountNumber}}",
"fields": "*"
}
}listAccounts
List chart of accounts.
{
"action": "sage-intacct.listAccounts",
"config": {
"filter": "ACCOUNTTYPE = 'balancesheet'",
"pageSize": 500
}
}Project Actions
getProject
Get project by ID.
{
"action": "sage-intacct.getProject",
"config": {
"projectId": "{{input.projectId}}",
"fields": "*"
}
}createProject
Create a project.
{
"id": "create-project",
"type": "action",
"action": "sage-intacct.createProject",
"config": {
"projectId": "PROJ-{{input.projectNumber}}",
"name": "{{input.projectName}}",
"description": "{{input.description}}",
"category": "{{input.category}}",
"status": "Active",
"customerId": "{{input.customerId}}",
"managerId": "{{input.managerId}}",
"beginDate": "{{input.startDate}}",
"endDate": "{{input.endDate}}",
"currency": "USD",
"budgetAmount": "{{input.budget}}"
}
}listProjects
List projects.
{
"action": "sage-intacct.listProjects",
"config": {
"filter": "PROJECTSTATUS = 'Active'",
"pageSize": 100
}
}Generic Query
query
Execute a generic query on any object.
{
"action": "sage-intacct.query",
"config": {
"object": "GLACCOUNT",
"fields": "ACCOUNTNO,TITLE,ACCOUNTTYPE,NORMALBALANCE",
"filter": "STATUS = 'active'",
"orderBy": "ACCOUNTNO",
"pageSize": 500
}
}Common Objects
| Object | Description |
|---|---|
CUSTOMER | Customers |
VENDOR | Vendors |
ARINVOICE | AR invoices |
APBILL | AP bills |
ARPAYMENT | AR payments |
APPAYMENT | AP payments |
GLBATCH | Journal entries |
GLACCOUNT | GL accounts |
PROJECT | Projects |
EMPLOYEE | Employees |
ITEM | Items |
LOCATION | Locations |
DEPARTMENT | Departments |
CLASS | Classes |
Webhook Triggers
Sage Intacct can trigger workflows via platform events.
{
"trigger": {
"type": "webhook",
"provider": "sage-intacct",
"events": ["ARINVOICE.created", "APPAYMENT.created"]
}
}Example Workflow
Invoice creation from HubSpot deal:
{
"name": "Create Sage Invoice from Won Deal",
"trigger": {
"type": "webhook",
"provider": "hubspot",
"events": ["deal.propertyChange"]
},
"steps": [
{
"id": "check-stage",
"type": "condition",
"config": {
"conditions": {
"and": [
{ "left": "{{input[0].propertyName}}", "operator": "eq", "right": "dealstage" },
{ "left": "{{input[0].propertyValue}}", "operator": "eq", "right": "closedwon" }
]
},
"then": ["get-deal"],
"else": []
}
},
{
"id": "get-deal",
"type": "action",
"action": "hubspot.getDeal",
"config": {
"dealId": "{{input[0].objectId}}",
"properties": ["dealname", "amount", "closedate"]
}
},
{
"id": "get-company",
"type": "action",
"action": "hubspot.getAssociations",
"config": {
"objectType": "deals",
"objectId": "{{input[0].objectId}}",
"toObjectType": "companies"
}
},
{
"id": "find-customer",
"type": "action",
"action": "sage-intacct.listCustomers",
"config": {
"filter": "NAME = '{{steps.get-company.output.results[0].properties.name}}'"
}
},
{
"id": "create-invoice",
"type": "action",
"action": "sage-intacct.createInvoice",
"config": {
"customerId": "{{steps.find-customer.output.data[0].CUSTOMERID}}",
"invoiceDate": "{{now | date: 'MM/DD/YYYY'}}",
"dueDate": "{{now | dateAdd: 30, 'day' | date: 'MM/DD/YYYY'}}",
"description": "{{steps.get-deal.output.properties.dealname}}",
"lineItems": [
{
"accountNumber": "4000",
"amount": "{{steps.get-deal.output.properties.amount}}",
"memo": "Professional Services - {{steps.get-deal.output.properties.dealname}}"
}
]
}
},
{
"id": "notify-finance",
"type": "action",
"action": "slack.sendMessage",
"config": {
"channel": "#finance",
"text": "Invoice created in Sage Intacct for {{steps.get-deal.output.properties.dealname}} (${{steps.get-deal.output.properties.amount}})"
}
}
]
}Dimensions
Sage Intacct uses dimensions for reporting segmentation:
| Dimension | Description |
|---|---|
LOCATIONID | Location/entity |
DEPARTMENTID | Department |
PROJECTID | Project |
CUSTOMERID | Customer |
VENDORID | Vendor |
EMPLOYEEID | Employee |
ITEMID | Item |
CLASSID | Class |
Rate Limits
| Limit | Value |
|---|---|
| API calls/minute | 300 |
| Concurrent sessions | 5 per company |
| Records per request | 100 |
Troubleshooting
Common Errors
| Error | Cause | Solution |
|---|---|---|
customerId is required | Missing customer ID | Provide customer ID |
BL01001973 | Duplicate record | Check for existing record |
BL01001074 | Invalid reference | Verify dimension IDs |
WS0001 | Authentication failed | Check credentials |
XL03000009 | Session expired | Refresh session |
XML API Notes
Sage Intacct uses an XML-RPC style API. All requests are wrapped in XML format automatically by the connector. Field names use ALL CAPS (e.g., CUSTOMERID, NAME).
Filter Syntax
Filters use SQL-like syntax:
STATUS = 'active'
TOTALDUE > 0
WHENCREATED >= '01/01/2024'
NAME LIKE 'Acme%'