Syncing Bills and Bill Payments to NetSuite

Last updated: August 10, 2026

Spendflo automatically creates the corresponding records in NetSuite for every bill and bill payment — so your books stay in sync without any manual data entry. This article covers the integration settings that keep syncs healthy, how and when bill and payment records are created, how to handle a closed posting period, and how to reconcile Spendflo against NetSuite.

 

Integration settings

From Integrations → NetSuite → Edit Configuration, a few settings directly affect whether syncs succeed — worth checking during onboarding so issues get caught early instead of surfacing later as a sync failure.

Accounts — each subsidiary has its own Bills Payable Account and GL Cash Account, configured independently. These are the accounts used on every vendor bill and vendor payment Spendflo creates in NetSuite for that subsidiary.

Preference (Mandatory Fields) — Spendflo reads whether Department, Class, and Location are required fields in your NetSuite setup, and mirrors that requirement in Spendflo. A bill missing a field NetSuite considers mandatory gets caught before it’s ever submitted, not after it fails to sync.

Period — Spendflo keeps a running view of your NetSuite accounting periods, by fiscal year: effective date, expiry date, and whether each one is Open or locked/closed (shown as separate AP Lock and AP Closed indicators). Since a closed period is one of the most common reasons a sync fails, checking this ahead of time lets you avoid submitting into a period you already know is closed.

Permission — Spendflo checks each of the NetSuite permissions the integration needs, individually, and shows a live count (for example, 10/10 Available) so you know at a glance whether anything’s missing. The permissions checked are:

  • Vendor Bills (Full) — create bills
  • Vendor Payments (Full) — create bill payments
  • Purchase Orders (View) — create purchase orders
  • Vendors (View) — look up vendor IDs and validate vendor-subsidiary associations
  • Accounts (View) — look up GL accounts, AP account, and bank account
  • Subsidiaries (View) — validate subsidiary associations
  • Departments (View) — cache department list for bill line mapping
  • Classes (View) — cache class list for bill line mapping
  • Locations (View) — cache location list for bill line mapping Accounting Preferences (Full) — required for the integration to read and manage your NetSuite accounting configuration

If any permission shows as missing, it can be granted in NetSuite and rechecked from this same page — you don’t need to wait for a bill to actually fail syncing to find out.

 

Vendor bills

Whenever a bill is created in Spendflo, a matching vendor bill record is created in NetSuite. Exactly when that happens — before or after the bill is approved in Spendflo — is set in the Creating Bills in NetSuite task of your Procure to Pay workflow (see our guide on Configuring the Procure-to-Pay Workflow). This should match the Approval Routing setting for Vendor Bills in NetSuite itself (Setup → Accounting → Manage G/L → Approval Routing), so both systems agree on the timing:

  • If Approval Routing is on, the vendor bill is created in NetSuite as soon as the bill is created in Spendflo, landing there as Pending Approval — so the obligation is visible right away, even before your team has finished approving it in Spendflo. The moment the bill is approved in Spendflo, Spendflo flips the NetSuite record to Open.
  • If Approval Routing is off, Spendflo waits until the bill is fully approved before creating anything in NetSuite — it’s created directly as Open, with no intermediate status.

Either way, the obligation gets recorded in NetSuite as soon as it’s supposed to, without you needing to do anything.

The vendor bill in NetSuite uses the exact same data as the Spendflo bill: vendor, subsidiary, invoice date, due date, and each line item’s amount, memo, and dimensions (department, class, location). The GL account on each line comes directly from the GL coding on the bill in Spendflo. The one field that isn’t set per bill is the Accounts Payable account — that comes from the Bills Payable Account configured for the bill’s subsidiary (see Integration settings above), and it’s used on every vendor bill Spendflo creates for that subsidiary.

 

Bill payments

A vendor payment record is created in NetSuite the moment a bill payment is marked as Paid in Spendflo. Right now, the only supported payment method is Paid Outside Spendflo — you make the payment through your own bank or process, then record it in Spendflo — and that recording step is exactly what triggers the NetSuite entry. Unlike vendor bills, there’s no before/after timing option here: the payment is always created in NetSuite at the moment it’s confirmed as paid.

Spendflo only creates the payment once it has confirmed the bill is Open in NetSuite — payments are never created against a bill that hasn’t landed there yet. The vendor payment uses the payment date, amount, and the GL Cash Account configured for that subsidiary (see Integration settings above), and is linked to the specific vendor bill it’s settling.

 

Voiding

Voiding a bill or bill payment in Spendflo creates a reversing journal entry in NetSuite. This depends on two things on the NetSuite side, beyond the permissions listed above:

  • Bills (Full) and Pay Bills (Full) permissions on the NetSuite role — without these, the reversing entry can’t be created.
  • “Void Transactions Using Reversing Journals” must be disabled in NetSuite (Setup → Accounting → Accounting Preferences). If this setting is enabled, voiding fails for vendor bills — NetSuite handles the void differently in that mode, and Spendflo’s reversing-entry approach doesn’t apply.

If void is failing in your instance, check this setting first — it’s the most common cause.

 

Changing the posting period and resyncing

The posting period determines which NetSuite accounting period a bill or payment lands in — it defaults to the invoice date (for bills) or the payment date (for payments). If that period is closed in NetSuite, the sync fails and Spendflo tells you so.

To fix it, open the bill or payment and update its Posting Date to a period that’s still open in NetSuite — this doesn’t change the original invoice or payment date, only where it posts. Then use Retry Sync to resend it. The updated posting date is what gets used on the next attempt.

You don’t have to wait for a sync to fail to find this out — the Period tab in Integration settings shows every period’s open/locked status ahead of time, so you can tell in advance whether a period will cause a problem.

 

Reconciliation

Spendflo periodically checks every bill and bill payment it’s created against the matching record in NetSuite, comparing status, amount, GL account, dimensions, and posting period. Where something doesn’t match, it shows up in the reconciliation view with the Spendflo value and the NetSuite value side by side, so you can see exactly what’s different.

Spendflo never changes anything in NetSuite to fix a mismatch automatically — it’s flagged for you to review. You can filter the reconciliation view down to just the records with a discrepancy, open the affected bill or payment, correct it in Spendflo, and trigger a resync.

This also catches a specific case worth knowing about: if someone applies a payment directly in NetSuite against a bill that’s still showing as Open in Spendflo, that shows up as a discrepancy too — since the payment didn’t happen through Spendflo.