ERP Integrations for Commission Platforms: Why Custom Queries Win (2026)

Ampersand Blog Writings from the founding team

16 min read
Apr 30, 2026
Article cover image

Why Commission and Comp Platforms Need Customer-Specific ERP Query Support (Not Pre-Built Endpoints)

Why commission and RevOps platforms need per-customer ERP query support instead of rigid NetSuite integrations

Chris Lopez's profile picture

Chris Lopez

Founding GTM

Why Commission and Comp Platforms Need Customer-Specific ERP Query Support (Not Pre-Built Endpoints)

If you build a sales commission platform, a variable comp engine, or a revenue allocation tool, you have one core data dependency: the source-of-truth invoice and customer records that determine which deals pay out, how much, and when. For mid-market and enterprise customers, that source of truth lives in NetSuite, Xero, QuickBooks, Sage Intacct, or SAP. And every one of those customers has a different schema, different custom fields, and different opinions about which records actually represent commissionable revenue.

The instinct most commission-platform engineering teams start with is to ship a single, opinionated NetSuite integration: a fixed list of objects, a fixed set of fields, a hardcoded query. That works for the first three customers. By customer ten, the platform's engineering team is on a treadmill of one-off SQL patches, custom field whitelists, and hotfixes for "a customer's NetSuite admin renamed a field again." By customer fifty, the team has either built a custom-query engine inside their product, or lost deals to a competitor who already has one.

This post is for engineering leaders at commission, comp, RevOps, and revenue-allocation platforms who are about to learn this lesson the hard way. The architectural answer, after working with dozens of product teams hitting this same problem, is straightforward: per-customer custom queries against the ERP, not a pre-built endpoint. Here is why, what it looks like in practice, and how to ship it without writing a NetSuite SDK from scratch.

The fundamental problem: every ERP customer is a custom schema

NetSuite, Xero, and QuickBooks Online all behave like SaaS APIs from a marketing slide. In practice, every enterprise NetSuite tenant is a custom database. The platform ships with standard records (Customer, Invoice, Item, Sales Order, Subscription, Journal Entry), but every customer adds custom records, custom fields, custom segments, custom forms, and custom saved searches that encode their specific revenue logic.

For a commission platform, this is not a peripheral concern. It is the integration. The reason is that "what counts as a commissionable invoice" is not a generic concept. Some customers pay commissions on bookings, some on billings, some on cash receipts. Some pay only on net-new ARR, some include expansion, some net out churn. Some attribute by line-item revenue category, some by parent customer, some by subsidiary. Some require commissions to exclude certain product SKUs, certain regions, or certain deal types. Each of those distinctions maps to a different filter condition, a different join, a different field on a different custom record.

The naive integration that ships "Get all invoices for customer X, filter by date range, return amount" handles roughly zero of those cases at the precision an enterprise customer expects. The customer expects to specify, in their own terms, which records count and which fields drive the calculation. And they expect that specification to live somewhere they (or their solutions partner) can edit without filing a support ticket with the commission platform vendor.

Engineering leaders we have worked with at commission and RevOps platforms have all hit this same constraint. The answer is not to keep adding feature flags and hardcoded filters. The answer is to expose the ERP's native query interface, on a per-customer basis, with the rest of the integration plumbing (auth, rate limiting, schema discovery, field mapping) handled by infrastructure.

Why pre-built endpoints fail at scale

Consider the typical roadmap a commission platform follows. Phase one ships a NetSuite integration with a fixed list of fields. Phase two adds custom-field support, where the customer can map a few extra fields to known commission concepts. Phase three adds a UI for filter conditions: "include invoices where status is 'Paid' and item type is not 'Service'." Phase four, inevitably, gets a customer who needs a join across two custom records, a saved-search reference, and a subsidiary-scoped filter that the existing UI cannot express. The engineering team writes a custom one-off integration for that customer, ships it as a tenant-specific code branch, and quietly accepts that this customer is now a maintenance liability.

This pattern compounds. By customer twenty, the platform has fifteen tenant-specific code paths. The on-call engineer has to know which customer is on which branch. The release process gates every NetSuite-touching change through a per-tenant test matrix. New engineers spend their first month learning the org's "NetSuite tribal knowledge." The product roadmap stops including new commission features because the integration team is busy keeping the existing integrations from breaking.

The architectural mistake is not in any single decision. It is in the assumption that the integration vendor's product team can predict, in advance, every shape of NetSuite query that any future customer will need. They cannot. The product surface that has to ship is "give the customer (or the customer's solutions partner) a way to write the query themselves, in the ERP's own query language, scoped to that customer's tenant."

For NetSuite, that query language is SuiteQL: a SQL-like dialect that runs against the customer's tenant via the REST API. SuiteQL handles joins, custom records, custom fields, saved searches, and subsidiary scoping in a way that no generic REST endpoint can. A commission platform that lets a customer paste in a SuiteQL query, get back rows, and map those rows into commission-calculation inputs has solved the problem in a way no number of hardcoded endpoints ever will. For Xero, it is the equivalent: a constrained query API that lets you express filter conditions and fetch the right invoice and contact records per customer. For SAP, it is OData with custom CDS views. For QuickBooks, it is the QBO Query Language.

The pattern across ERPs is the same. The integration platform's job is not to abstract the query language away. It is to expose the query language safely, scoped to one customer's tenant, with auth and rate limiting handled, results streamed back to the commission platform's pipeline.

Industry context: the rise of vertical commission and RevOps platforms

The commission and variable-comp space has fragmented vertically over the past three years. Generalist tools like Xactly, CaptivateIQ, and Spiff are now competing with vertical-specific platforms for SaaS, manufacturing, life sciences, and professional services. Each vertical has different commissionable-event definitions, different ERP coverage requirements, and different data-residency constraints.

The unifying technical reality is that all of them have to read invoice and revenue data out of customer ERPs. The vertical differentiation is in how they model and calculate commissions. The integration to the ERP is table stakes. Investors and CFOs evaluating these platforms increasingly include "ERP integration depth" as a procurement criterion, because the cost of a shallow integration shows up six months later as reconciliation chaos. A recent Forrester report on revenue performance management tracked enterprise buyer expectations and found ERP integration completeness to be the single highest-weighted factor in commission-platform RFPs.

The commission platforms that scale are the ones that treat the integration as a vertical-specific integrations product surface, not a side project. The ones that stall are the ones that treat NetSuite as "an integration we have," check the box on the procurement form, and discover six months later that "an integration" is not the same as "an integration that handles your customer's specific schema."

What a customer-specific query architecture actually looks like

Here is the pattern that scales for commission platforms across NetSuite, Xero, and QuickBooks.

The integration platform exposes a per-customer configuration that includes the query (SuiteQL, OData, QBQL, or equivalent), the field mapping that turns query columns into commission-calculation inputs, and the sync cadence. The query lives in the customer's configuration file, version-controlled in your repo or a managed configuration store, and editable by your customer success engineers (or by the customer's NetSuite solutions partner) without a code deploy.

When the integration runs, it authenticates against the customer's tenant using managed credentials, executes the query, streams the result rows through the field mapper, and lands them in the commission platform's calculation pipeline. The integration platform handles auth refresh, rate limiting, retry logic, and schema-change detection. The commission platform's product team handles the calculation logic and the customer-facing UX.

This architecture has three load-bearing properties.

First, it is per-customer. Every customer has their own query, their own field mapping, and their own sync schedule. Adding a new customer is a configuration change, not a code change.

Second, it preserves the ERP's native expressive power. SuiteQL joins, Xero status filters, SAP CDS views: the customer's solutions partner can express the query in the language they already know, scoped to the customer's tenant.

Third, it isolates the commission platform's product team from ERP-specific plumbing. The team that writes commission calculation logic does not need to learn NetSuite token-based authentication, Xero OAuth refresh, or QuickBooks rate-limit governance. Those are the integration platform's problem.

Building this in-house is possible, but the cost is significant. We have written before about why building integrations in-house breaks down at scale, and the commission-platform case is one of the cleanest illustrations. The infrastructure is undifferentiated. The competitive moat is in the commission logic and the customer experience, not in maintaining custom NetSuite SDK wrappers.

The white-label setup pattern enterprise commission buyers expect

One additional architectural consideration worth raising: enterprise buyers evaluating commission platforms increasingly expect the integration's setup flow to be embedded inside the commission platform's own product, not delegated to a third-party UI. This is the white-label expectation, and it has consequences for the integration architecture.

A white-label flow means the customer never sees the integration vendor's branding. The customer's NetSuite admin clicks an "Connect NetSuite" button inside the commission platform's settings, completes the OAuth or TBA workflow on a page styled to match the commission platform, and lands back on the commission platform's onboarding page. The customer's solutions partner authors the SuiteQL query inside the commission platform's UI, not inside an external configuration tool.

Building this in-house means the commission platform's engineering team has to expose every integration configuration surface (auth, query authoring, field mapping, sync schedule, error display) in their own UI. Building it on a managed integration platform means the commission platform's UI calls the integration platform's APIs, with the integration platform's branding hidden from the customer. Both approaches are viable. The latter is significantly less engineering investment, especially at scale.

Enterprise commission deals routinely include a clause about white-label integration setup. The platforms that can answer "yes, the entire flow is inside our product" win those deals. The platforms that have to explain the customer will see a third-party UI lose them.

Comparison: pre-built endpoints, generic iPaaS, and per-customer query support

DimensionPre-built endpoints (DIY)Generic iPaaSPer-customer query (Ampersand)
Handles customer-specific schemasOnly via tenant-specific forksLimited; recipes are genericYes, native SuiteQL/OData/QBQL per customer
Adds new customer in daysNo, requires engineeringSometimes, with recipe rewritesYes, configuration change only
Customer success can edit queryNo, code change requiredLimited recipe editingYes, declarative config
Auth lifecycle managementBuild and maintainPartialManaged, automatic refresh
Rate limiting and retriesBuild and maintainInconsistentBuilt-in, ERP-aware
Error surfacing per customerBuild dashboards from scratchLimited per-tenant visibilityPer-customer logs and alerts
Schema-change detectionManual, often surfaces as a bugManualAutomatic, with notifications
Engineering cost per new ERP2 to 4 quarters1 to 2 quartersDays to weeks

The middle column deserves a note. iPaaS tools like Workato or Tray have query-style steps in their recipe builders, but they are designed for end-user automation, not for embedded product integrations that scale across hundreds of customer tenants. The recipe model breaks down when every customer needs their own logic, and the iPaaS UI was never meant to be the customer-facing surface of a SaaS product.

How Ampersand handles this for commission platforms

Ampersand is a deep integration platform built specifically for product developers. For commission, comp, and RevOps platforms, the pieces that matter are these.

Custom query support per customer. SuiteQL queries against NetSuite, query-style reads against Xero and QuickBooks, OData and CDS views against SAP, and SOQL against Salesforce. The query is part of the customer's declarative integration config, version-controlled, and editable without a deploy.

Schema discovery. At install time, we enumerate the customer's tenant: standard records, custom records, custom fields, custom segments, saved searches. The integration vendor (or the customer's solutions partner) can build a query against the actual schema, not a guessed one. We have written about why field mapping is how AI agents and integration platforms learn enterprise reality, and the same logic applies directly to commission data flows.

Managed auth across ERPs. NetSuite TBA and OAuth, Xero OAuth 2.0 with offline scope, QuickBooks OAuth, SAP OAuth and basic auth: all handled by the platform, with automatic token refresh and clear error surfaces.

Bulk read optimization. Commission platforms read invoice and customer data in volume, often nightly or weekly. We optimize for paginated reads, scheduled cadences, and incremental syncs that respect each ERP's rate limits.

White-labeled setup options. The integration UI, if you expose one to your customer, can be embedded inside your product without the customer ever seeing an Ampersand-branded surface. For commission platforms whose enterprise buyers expect a polished, in-product experience, this matters.

The customer outcome we hear consistently from commission and RevOps platforms: the engineering team stops being the bottleneck on adding NetSuite customers. The customer success team can onboard a new customer with a SuiteQL query and a field mapping, ship it through CI/CD, and see data flowing the same week. The product team can focus on commission logic, payout workflows, and dispute resolution UX, which is where the platform's competitive differentiation actually lives.

The Ampersand sell

If you run a commission, comp, RevOps, or revenue-allocation platform, the integration to your customer's ERP is not a feature you ship once. It is a product surface that has to flex per customer, on every ERP your customers run on, with auth, rate limiting, schema discovery, and observability handled at infrastructure level.

Ampersand is purpose-built for this. Custom queries against NetSuite, Xero, QuickBooks, Sage Intacct, SAP, and Microsoft Dynamics, scoped per customer. Declarative configuration in YAML, version-controlled, CI/CD-deployable. Managed auth, including the ugly cases (TBA token rotation, OAuth refresh, SAP basic auth). Bulk read optimization tuned per ERP. Per-customer dashboards with logs, errors, and quota usage. White-label embedding so your customers see your product, not ours.

The Ampersand documentation covers the YAML model, the query interface for each ERP, and the field-mapping configuration. The how-it-works page walks the architecture end to end. If you want to talk through your specific ERP coverage and customer-specific query needs, you can reach our team through the main site.

FAQ

Why can't I just expose a SQL editor in my product UI for customers?

You can. The hard part is everything around the SQL editor: authenticating to the customer's tenant, refreshing tokens, respecting NetSuite's concurrency governance, paginating results, handling schema changes, surfacing errors per customer, and making the whole thing safe enough that a misconfigured query does not take down your data pipeline. Ampersand handles all of that, so the SQL editor in your UI becomes a thin layer over a hardened backend.

Does Ampersand support SuiteQL specifically?

Yes. SuiteQL is the canonical query interface for NetSuite, and it is fully supported. The same model extends to Xero's filter API, QuickBooks Query Language, and SAP OData and CDS views.

How do you handle schema changes when a customer's NetSuite admin renames a field?

Schema discovery runs on a configurable cadence and surfaces changes through alerts. The customer's field mapping can reference the field by ID rather than by name, which insulates the integration from rename events. We also support a re-mapping flow for the cases where the change is structural rather than cosmetic.

Can my customer success team edit the query without a code deploy?

Yes. The query lives in declarative configuration that can be edited through the dashboard or through your repo. CI/CD-deployable means a customer-success engineer can ship a query change through a PR rather than a hotfix.

What's the typical onboarding time for a new ERP customer?

For commission platforms, the pattern we see is one to three days from "customer hands us their NetSuite credentials" to "first commissionable invoice flowing into our calculation engine." That assumes the customer's solutions partner is available to author the SuiteQL query. If your team writes the query, the bottleneck is usually understanding the customer's commission policy, not the integration plumbing.

Do I need a separate Ampersand integration per ERP, or is it one platform across all of them?

One platform. The declarative config model is consistent across NetSuite, Xero, QuickBooks, Sage Intacct, SAP, and Microsoft Dynamics. Auth, rate limiting, and schema discovery are platform-level capabilities. The query syntax differs because each ERP has its own native query language, and we expose the native one rather than abstracting it away.

How does pricing scale as I add ERP customers?

We are usage-based, not per-connector. Adding NetSuite, Xero, and QuickBooks does not multiply your bill by three. You pay for the integration activity your platform actually generates, which lines up with how commission platforms grow.

Conclusion

The architectural failure mode for commission, comp, and RevOps platforms is to treat ERP integration as a fixed feature that ships once. It is not. It is a product surface that has to flex per customer, on every ERP your customers run on. The platforms that scale build (or buy) the infrastructure to support per-customer custom queries, schema-aware field mapping, and managed auth across every ERP in their target market. The ones that stall keep adding tenant-specific forks until the maintenance cost crowds out the roadmap.

Ampersand is built for this exact pattern. If your commission platform is about to hit the wall on its tenth NetSuite customer, or if you are evaluating ERP coverage for a new vertical, the right architecture is per-customer query support on top of managed integration infrastructure. Learn more at withampersand.com.

Recommended reads

View all articles
Loading...
Loading...
Loading...