Skip to main content
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.

What is NetSuite?

NetSuite is Oracle’s cloud ERP platform—the system of record for financials, inventory, procurement, and order management at thousands of growing businesses. It centralizes transactions, customer and vendor data, inventory levels, and accounting in one place, making it a critical data source for operations, finance, and supply chain teams. Connecting NetSuite to Parabola unlocks that data for automation. Instead of scheduling manual exports or building custom integrations, you can query NetSuite directly using SuiteQL—NetSuite’s SQL-based query language—and pull exactly the records you need into automated workflows.

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. 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/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 OAuth 2.0 for secure API access. You’ll need to create an integration record in NetSuite and set up token-based authentication to connect.

Setting up OAuth 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—again, 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 your credentials when prompted:
  • 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 include:
  • 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 data including 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 that Saved Search can’t return: Query cash sales, cash refunds, credit memos, and card charges/refunds to power finance reconciliations, revenue reporting, and payment audits.
  • Replicate standard NetSuite reports: Build AR aging, AP aging, income statement, and P&L-style reports as SuiteQL queries so they can feed Parabola flows, Slack alerts, or Google Sheets dashboards automatically.
  • Pull high-volume transaction-line data: When a month’s worth of sales order lines or GL transactions exceeds Saved Search limits, SuiteQL can return the full dataset by line.
  • Resolve internal IDs to readable names on custom fields: Parabola’s Saved Search integration already resolves internal IDs to readable names for standard fields like locations, vendors, departments, and subsidiaries. SuiteQL is specifically useful for custom fields with frequently changing, non-text-entry values (e.g., custom list fields or custom record references) where the Saved Search integration returns the internal ID instead of the display name. With SuiteQL, you can join to the underlying custom list or record table to return the readable value directly.
  • Inventory reporting by lot, bin, or location: Pull inventory balances joined with item descriptions, UPCs, pack sizes, and lot/expiration dates for reconciliation against 3PL reports.
  • 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.
  • Assembly items and BOM queries: Pull parent items with their component children, costs, and quantities for manufacturing and kit management workflows.
  • Month-end financial close: Aggregate GL transactions, journal entries, and subsidiary balances for automated close reports and variance analysis.

Tips for using Parabola with SuiteQL

  • Filter and aggregate in SuiteQL first: Do your 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. Pull only the columns and rows you actually need.
  • Use the Parabola AI assistant to write queries: If you’re not familiar with SuiteQL, use the chat interface on the left side of your canvas to describe what you want—it can help generate and refine queries.
  • Format your query as a single line: The Pull from SuiteQL step requires your entire query on one line. If you’re copying a multi-line query from a reference (like Tim Dietrich’s library), flatten it into one line before pasting.
  • Use BUILTIN.RELATIVE_RANGES for rolling date windows: Instead of calculating dates in Parabola, use NetSuite’s built-in function (e.g., BUILTIN.RELATIVE_RANGES('DAGO90','START') for “90 days ago”) directly in your SuiteQL query.
  • Filter by date ranges for incremental pulls: Use WHERE lastmodifieddate >= SYSDATE - 1 or similar clauses to pull only recently updated records instead of reprocessing all historical data on every run.
  • Schedule your flows strategically: Run financial reconciliation flows nightly after transactions close, daily for operational dashboards, or hourly for time-sensitive inventory or order monitoring.
  • Document your queries with cards: Add cards to your Parabola flow explaining what each SuiteQL query does, what business logic is applied, and which teams rely on the output—this makes flows much easier to maintain over time.
  • Test in sandbox first: Use your NetSuite sandbox environment (with the -sb1 Account ID suffix) to validate queries and flow logic before connecting to production data.

Sample query to copy

Here’s 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. By connecting NetSuite to Parabola with SuiteQL, you turn your ERP into a live data source for automated reporting, cross-system reconciliation, and operational workflows—without relying on scheduled exports, custom scripts, or engineering support.
Last modified on April 17, 2026