Skip to main content

Documentation Index

Fetch the complete documentation index at: https://parabola.io/docs/llms.txt

Use this file to discover all available pages before exploring further.

NetSuite is Oracle’s cloud ERP for financials, inventory, procurement, and order management at thousands of mid-market and enterprise companies. Connecting NetSuite to Parabola via SuiteQL lets finance and ops teams query the ERP directly, pull records that Saved Searches can’t return, and feed the results into automated reconciliations, reports, and alerts, without waiting on IT.
Looking for Saved Searches?If you want to pull results from a NetSuite Saved Search, use the Pull from NetSuite integration instead. This step is specifically for running SuiteQL queries.

SuiteQL vs. Saved Searches

Saved Searches are the most common way to pull NetSuite data. They’re configured inside NetSuite’s UI and referenced by Parabola, and for most reporting needs, a Saved Search is the right tool. SuiteQL is the better fit when Saved Searches fall short:
  • Certain transaction types aren’t available via Saved Search, including cash sales, cash refunds, credit memos, and card charges and refunds. SuiteQL is the only way to pull these through the API.
  • Standard NetSuite reports aren’t Saved Searches. AR aging, income statements, and P&L-style reports can’t be pulled as Saved Searches, but you can reproduce them with SuiteQL.
  • Custom joins, readable field values, and large datasets. If you need joins Saved Search doesn’t expose, custom field values resolved to readable names instead of internal IDs, or more rows than a Saved Search can return in one response, SuiteQL handles it.
If a Saved Search already returns what you need, use the Pull from NetSuite integration. Otherwise, reach for SuiteQL.

How to authenticate

NetSuite uses token-based authentication for API access. You’ll create an integration record in NetSuite and generate an access token to connect.

Setting up token-based auth in NetSuite

1

Enable token-based authentication in NetSuite

  • Log in to NetSuite as an administrator.
  • Go to Setup > Company > Enable Features.
  • Under the SuiteCloud tab, check Token-based Authentication and REST Web Services, then save.
2

Create an integration record

  • Navigate to Setup > Integration > Manage Integrations > New.
  • Give the integration a descriptive name (e.g., “Parabola Integration”).
  • Under Authentication, check Token-based Authentication.
  • Save the record and copy the Consumer Key and Consumer Secret — these are only shown once.
3

Create an access token

  • Navigate to Setup > Users/Roles > Access Tokens > New.
  • Select your integration record, the user account, and the role that has appropriate permissions.
  • Save the token and copy the Token ID and Token Secret — also shown only once.
4

Find your NetSuite Account ID

Your Account ID appears in your NetSuite URL (e.g., https://1234567.app.netsuite.com — the number is your Account ID). For sandbox environments, the format is typically 1234567_SB1.

Connecting in Parabola

1

Add a Pull from SuiteQL step

In your Parabola flow, add a Pull from SuiteQL step.
2

Enter your credentials

Click Authorize and enter:
  • Account ID: Your NetSuite account number (e.g., 1234567 for production or 1234567-sb1 for sandbox)
  • Consumer Key and Consumer Secret: From your integration record
  • Token ID and Token Secret: From your access token
3

Write your SuiteQL query

Once connected, enter your SuiteQL query to pull the data you need. Use the chat interface on the left side of your canvas to help write queries if needed.
The role assigned to your access token determines what data is accessible. Make sure the role has at least View permission for the NetSuite record types you plan to query.

Available data

SuiteQL gives you SQL-based access to virtually any NetSuite record your role has permission to view. Common record types you can query:
  • Transactions — sales orders, purchase orders, invoices, vendor bills, credit memos, cash sales, cash refunds, item fulfillments, item receipts, journal entries, and return authorizations. Filter by date, status, type, subsidiary, or any other field.
  • Transaction lines — line-level details for any transaction including items, quantities, amounts, GL accounts, and custom segments.
  • Customers and leads — account details, billing addresses, payment terms, sales rep assignments, transaction history, and overdue balances.
  • Vendors — supplier records including contact details, payment terms, currency, and associated purchase history.
  • Items and inventory — product catalog with SKUs, pricing, inventory levels by location and bin, reorder points, preferred vendors, matrix items, item groups, and assembly components.
  • Employees — employee records with roles, permissions, department, subsidiary, and login history.
  • Accounts (Chart of Accounts) — GL account definitions, types, subsidiary mappings, and balances.
  • Subsidiaries, locations, and bins — multi-entity and multi-location structure for filtering and grouping cross-subsidiary reports.
  • Support cases — open and closed case details including assignee, status, and customer.
  • Custom records, fields, and segments — any custom objects configured in your NetSuite instance.
NetSuite transaction type codesWhen querying the transaction table, you’ll filter by type codes like CashSale, CustCred, CardChrg, and CardRfnd. Tim Dietrich’s NetSuite transaction table reference is the best guide for these codes and common join patterns, and his SuiteQL Query Library has 100+ ready-to-use queries. For the official Oracle reference on SuiteQL syntax and supported tables, see NetSuite’s SuiteQL documentation.

Common use cases

  • Pull transaction types Saved Search can’t return: Query cash sales, cash refunds, credit memos, and card charges and refunds to power finance reconciliations against Stripe payouts, Ramp card transactions, or bank deposits.
  • Replicate standard NetSuite reports: Build AR aging, AP aging, income statement, and P&L-style reports as SuiteQL queries, then drop the output into Google Drive, Smartsheet, or a Slack summary.
  • Pull high-volume transaction-line data: When a month of sales order lines or GL transactions exceeds Saved Search row limits, SuiteQL returns the full set by line, so finance can post revenue and costs without missing rows.
  • Resolve internal IDs to readable names on custom fields: Parabola’s NetSuite Saved Search step already resolves IDs for standard fields. For custom list and custom record fields where Saved Search returns the internal ID, SuiteQL can join to the underlying table and return the display name directly.
  • Inventory reporting by lot, bin, or location: Pull inventory balances joined with item descriptions, UPCs, pack sizes, and lot/expiration dates to reconcile against 3PL counts from ShipBob, ShipHero, or ShipMonk.
  • Purchase order and fulfillment analysis: Query open POs with line-level detail, expected ship dates, receiving status, and custom fields to track supplier performance and inbound inventory alongside Coupa data.
  • Assembly items and BOM queries: Pull parent items with their component children, costs, and quantities for manufacturing and kit management workflows.
  • Push to your warehouse: Send the raw query output into Snowflake, BigQuery, or Redshift so analytics teams can join NetSuite with the rest of the business.

Tips for using Parabola with SuiteQL

  • Filter and aggregate in SuiteQL first. Do filtering, aggregation, and joins in the SQL query before it reaches Parabola. This reduces data volume, speeds up your flow, and avoids hitting API limits.
  • Use the Parabola AI assistant to write queries. If you’re new to SuiteQL, describe what you want in the chat panel on the left of your canvas and let it draft the query for you.
  • Format your query as a single line. The Pull from SuiteQL step requires the entire query on one line. Flatten multi-line queries before pasting.
  • Use BUILTIN.RELATIVE_RANGES for rolling windows. Instead of calculating dates in Parabola, use NetSuite’s built-in function (e.g., BUILTIN.RELATIVE_RANGES('DAGO90','START') for “90 days ago”) inside the query.
  • Pull incrementally. Use WHERE lastmodifieddate >= SYSDATE - 1 or similar to pull only recently updated records instead of reprocessing all history on every run.
  • Match cadence to use case. Nightly for financial reconciliation after transactions close, daily for ops dashboards, hourly for time-sensitive inventory or order monitoring.
  • Document your queries with cards. Add a card on the canvas explaining what the query does, what business logic is applied, and which teams rely on the output.
  • Test in sandbox first. Validate queries against your sandbox account (using the -sb1 Account ID suffix) before pointing the flow at production.

Sample query to copy

A working single-line example that pulls card charges, card refunds, and credit memos from the last 90 days with account, vendor, subsidiary, and department names joined in:
SELECT t.trandate AS TranDate, t.memo AS Memo, t.tranid AS TranID, t.type AS TranType, tl.ForeignAmount AS TotalAmount, a.acctnumber AS AccountNumber, a.acctname AS AccountName, v.entityid AS VendorName, s.name AS Subsidiary, d.name AS DepartmentName FROM transaction t LEFT JOIN transactionLine tl ON tl.transaction = t.id LEFT JOIN department d ON d.id = tl.department LEFT JOIN account a ON a.id = tl.account LEFT JOIN entity v ON v.id = t.entity LEFT JOIN subsidiary s ON s.id = t.subsidiary WHERE t.trandate >= BUILTIN.RELATIVE_RANGES('DAGO90','START') AND t.type IN ('CardChrg', 'CardRfnd', 'CustCred');
Swap the transaction types in the IN clause or adjust the date range to fit your use case.

FAQ

Use SuiteQL when the records you need aren’t available via Saved Search (cash sales, cash refunds, credit memos, card charges and refunds), when you need to reproduce a standard NetSuite report, when a Saved Search row limit cuts off your data, or when you need custom field values resolved to readable names. For everything else, the Saved Search integration is simpler.

Can I push data back into NetSuite?

The Pull from SuiteQL step is read-only. To create or update NetSuite records, use a Send to an API step pointed at NetSuite’s REST API with your token credentials.

Why is my query failing with a syntax error?

The two most common causes are multi-line queries (the step requires one line) and using SQL functions NetSuite doesn’t support. Check your query against Oracle’s SuiteQL reference for supported syntax.

How do I connect to a NetSuite sandbox?

Use your sandbox Account ID, which has a _SB1 suffix in NetSuite’s URL but is entered in Parabola as 1234567-sb1 (lowercase, with a dash). Generate sandbox credentials separately from production.
With NetSuite and Parabola connected via SuiteQL, the spreadsheets your team rebuilds for close, AR aging, and inventory reconciliation run on their own, with output landing in the systems where finance and ops actually work.
Last modified on May 18, 2026