Skip to content
Adapters

Square NetSuite integration that posts sales and payouts to your ERP

The Square NetSuite integration from Adapters posts Square sales, refunds, and processing fees into NetSuite as cash sales and deposits, matched to each Square payout, so the deposit in NetSuite equals the amount that hits your bank. It replaces custom SuiteScript and needs no code.

The live demo needs no card, and Starter is $49 a month.

Field mapping auto-plugged · tap a port to rewire

5 sample records ready

What running Square to NetSuite by hand costs you

  • Square deposits net of fees never match gross sales, so the NetSuite deposit is off without a fee line.
  • Keying daily Square totals into NetSuite by hand across locations wastes hours every close.
  • Refunds and disputes recorded late overstate revenue for the period they belong to.

The field mapping, out of the box

All 6 of these Square to NetSuite fields arrive mapped. Rewire any of them, or add your own, in the same visual data mapping tool you use for every adapter.

Input / SQUARE

payment.id
CashSale.ExternalId
payment.amount_money
CashSale.Total
payment.processing_fee
Expense.Amount
location.id
CashSale.Location
refund.amount_money
CashRefund.Total
payout.arrival_date
Deposit.TranDate

Transforms included

Square money is returned in the smallest currency unit and converts to NetSuite decimal amounts automatically; the processing fee posts to the expense account you choose, refunds map to cash refunds, and each payout groups its payments into a single NetSuite deposit that ties to the bank.

Square to NetSuite in depth

Point of sale into an ERP. Two systems that both decline to publish the number you most want: Square will not state a rate limit, and NetSuite will not return the status code your HTTP client is watching for. Read from Square and Oracle documentation, facts current as of 1 September 2026.

Square money is an integer in the smallest denomination

Square documents that a monetary amount is specified in the smallest denomination of the currency, so USD amounts are cents and 4250 means $42.50. Currencies such as the Japanese Yen are zero-decimal, where the smallest unit is one yen and no division applies. Any pipeline that hardcodes a divide by 100 misstates every zero-decimal currency by a factor of one hundred, with no error raised anywhere. Branch on the currency code.

The last page of a Square result set has no cursor

Square paginates with an opaque cursor. The first call omits it, each response carries the cursor for the next page, and the last page does not include one. That absence is the terminator, and it is the single most common place this integration breaks: code that loops while a cursor is truthy works, code that loops on a fixed page count silently drops the tail of the data. Default and maximum page sizes vary per endpoint, so read the limit for each one rather than assuming a shared value.

Square does not publish a rate limit number, so do not hardcode one

We are not going to print a figure here, because Square does not publish one and its own developer forums carry unanswered questions asking for it. That is worth stating plainly rather than repeating a number from a blog post. The correct design is to treat the rate limit as unknown and discoverable: handle the rate limit error explicitly, back off exponentially with jitter, and let observed throughput settle wherever it settles rather than tuning to a constant that was never documented.

Concurrency is the NetSuite ceiling, and it is shared

NetSuite meters simultaneous requests per account, not requests per second, and your integration shares that pool with scheduled scripts and every user running a saved search. A payments backfill parallelizes beautifully right up to the point it stops. Adding workers past the limit produces retries rather than throughput. Establish the account concurrency for your tier and stay inside what the business is not already consuming.

A NetSuite concurrency breach is HTTP 400, not 429

No NetSuite concurrency error returns 429. They arrive as 400, which generic retry middleware classifies as a permanent client error and does not retry. Combined with Square's undocumented rate limit on the read side, this route can lose records at both ends while every log line looks like an ordinary bad request. Match on the NetSuite error code rather than the status code and back off on it explicitly.

Idempotency is not optional on an ERP target

A retried write that creates a second record is a duplicate journal entry, not a duplicate warehouse row. Key every NetSuite record on the Square payment id and make the write an upsert against that key. That single decision is what makes a multi-month backfill safe to re-run after a concurrency drop, which it will need at least once.

Verify by totals, never by job status

A green run means the job finished, not that the data is right. Compare payment counts and the sum of gross amounts on both sides for the same window, and alert on the difference rather than the exit code. That check catches the dropped 400s, the truncated cursor page and a mismapped location, all of which otherwise present as a clean run. Related route: NetSuite integration tools.

How it goes live

Moving Square data into NetSuite on flat data integration pricing from $49 a month.

STEP 01

Pick the pair

Authorize a read scope on Square and a write scope on NetSuite, nothing wider.

STEP 02

Confirm the mapping

Check that payment.id lands in CashSale.ExternalId and payout.arrival_date in Deposit.TranDate on a sample record.

STEP 03

Schedule the sync

Turn on the SQUARE → NETSUITE schedule; failed records retry and every run is logged.

Try it in the live demo Preloads SQUARE → NETSUITE with sample records

Square to NetSuite sync common questions

How do you connect Square to NetSuite?

Through an integration layer, because neither system reads the other. The connector authenticates to the Square API, pulls orders, payments, tenders, refunds and fees per location, then writes them into NetSuite as cash sales or journal entries mapped to the right subsidiary and department. Locations map to NetSuite locations or classes so store level reporting still works.

Should Square post to NetSuite per transaction or per day?

Per day for most retail operations. A busy store can generate thousands of transactions a month, and posting each one individually bloats the NetSuite transaction table without adding reporting value. A daily summary per location, split by tender type and tax, gives you reconcilable numbers and keeps the ledger manageable.

How do Square fees post into NetSuite?

As a separate expense line, never netted against revenue. Square deducts processing fees before it deposits, so the bank deposit is smaller than gross sales. Book gross sales to revenue, the fee to a processing expense account, and group both against the deposit so the bank reconciliation clears without manual adjustment.

Can you map Square locations to NetSuite subsidiaries?

Yes, and you should decide the mapping before the first sync. Square location IDs are stable, so each one can drive a NetSuite location, department, class or subsidiary. Getting this wrong means re-posting history, because NetSuite will not let you retroactively reclassify posted transactions in bulk without a workaround.

How does the Square to NetSuite sync work?

The Square NetSuite integration from Adapters posts Square sales, refunds, and processing fees into NetSuite as cash sales and deposits, matched to each Square payout, so the deposit in NetSuite equals the amount that hits your bank. It replaces custom SuiteScript and needs no code.

How much does the Square NetSuite integration cost?

The Square to NetSuite pair is included on every plan: Starter $49, Growth $149, Scale $399 a month. You pay per plan, not per row or task, so a busier month costs the same.

Do I need to write code to connect Square and NetSuite?

No. Fields are auto-mapped the moment you pick the pair, and you can rewire any mapping visually before the first sync. Square money is returned in the smallest currency unit and converts to NetSuite decimal amounts automatically; the processing fee posts to the expense account you choose, refunds map to cash refunds, and each payout groups its payments into a single NetSuite deposit that ties to the bank.

Square and NetSuite, finally in agreement

Map the 6 Square fields once, starting with payment.id into CashSale.ExternalId, and the sync into NetSuite runs on schedule. Flat price from $49 a month, no per-task fees.

The live demo needs no card, and Starter is $49 a month.

Get started