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
Plug a source port into
Transform on this cable
JSON in
JSON out
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
Output / NETSUITE
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.
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.
Related Square and NetSuite connectors
Browse the full api connector library, or request a pair you do not see.
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.