ml-connector
Oracle E-Business SuiteAvalara

Oracle E-Business Suite and Avalara integration

Oracle E-Business Suite runs financials and procurement. Avalara AvaTax calculates and records sales and use tax across jurisdictions. Connecting the two means EBS invoices get accurate, audit-ready tax without manual lookups. As Accounts Payable and Accounts Receivable invoices post in EBS, their lines flow to Avalara as PurchaseInvoice and SalesInvoice transactions, and the calculated tax comes back to EBS where a write service exists. ml-connector handles the very different APIs on each side and moves the data on a schedule you control.

How Oracle E-Business Suite works

Oracle E-Business Suite exposes its data through the Integrated SOA Gateway, where an administrator deploys open interface tables and PL/SQL packages as REST services under a customer-chosen alias on the instance's own hostname and port. There is no shared base URL and no vendor-managed gateway. Calls use HTTP Basic Auth or a session token cookie and must carry application context such as the responsibility and operating unit org ID. EBS has no modern webhooks, so AP invoices, AR invoices, suppliers, customers, and items are read by polling open interface views filtered on LAST_UPDATE_DATE with offset and limit paging. Writes are usually two-step: a REST POST inserts into an interface table, then a concurrent program imports it.

How Avalara works

Avalara AvaTax is a cloud tax compliance service, not an ERP, so it has no native vendor, purchase order, GL account, or payment objects. It exposes transactions, companies, customers, items, tax codes, and exemption certificates through a REST v2 JSON API at rest.avatax.com, with a separate sandbox host. Every call uses HTTP Basic Auth built from a numeric account ID and a license key. CreateTransaction is synchronous and returns the full calculated tax inline, and the document code on each transaction acts as the idempotency key. AvaTax pushes no webhooks; list endpoints use OData-style $top, $skip, and $filter paging.

What moves between them

The main flow runs from Oracle E-Business Suite into Avalara. ml-connector polls EBS AP and AR invoice lines as they post and sends each as an Avalara PurchaseInvoice or SalesInvoice transaction, with ship-from and ship-to addresses, line amounts, and tax codes, to get jurisdiction-accurate tax. EBS customers and items are pushed to Avalara as customer codes and tax-code assignments so determinations and exemptions are correct. The calculated tax returns to EBS and is written into the invoice interface where a write service is deployed; where it is not, the result is recorded for review. Avalara holds no GL or vendor master, so no accounting records flow back out of it.

How ml-connector handles it

ml-connector stores both credential sets encrypted. For Oracle E-Business Suite it accepts the full instance base URL per customer, logs in for a session token, and attaches the responsibility and operating unit org ID context to every call, re-authenticating when EBS returns 401 on session timeout. For Avalara it builds the Basic Auth header from the account ID and license key and selects the sandbox or production host by environment. EBS invoice lines map to AvaTax transaction lines, and the EBS invoice number becomes the AvaTax document code, so CreateOrAdjustTransaction updates an uncommitted transaction in place rather than duplicating. Because neither system pushes events, EBS is polled on LAST_UPDATE_DATE at a cadence you set, and AvaTax is queried only to reconcile. EBS has no rate limiter, so calls run at low concurrency on an off-peak window to protect the shared instance, while Avalara 429 responses get exponential backoff with jitter. Two gotchas are handled directly: an EBS invoice write is an asynchronous interface insert that a concurrent program must import, so a 200 is confirmed against the base table; and a committed AvaTax document code cannot be reused, so a correction is voided and re-created.

A real-world example

A mid-sized industrial distributor runs Oracle E-Business Suite R12.2 for purchasing, payables, and receivables across operating units in several US states. Before the integration, staff calculated use tax on supplier invoices by hand and applied sales tax to customer invoices from spreadsheets, which produced wrong rates as jurisdictions changed and left gaps that surfaced during audits. With Oracle E-Business Suite and Avalara connected, each AP and AR invoice line is sent to AvaTax as it posts, the right rate is returned for the exact ship-to address, and exempt customers are honored from their certificates. Tax is consistent across operating units, and audit support comes from AvaTax's transaction record instead of a binder of spreadsheets.

What you can do

  • Calculate jurisdiction-accurate sales and use tax on Oracle E-Business Suite AP and AR invoices as they post.
  • Send EBS invoice lines to Avalara as PurchaseInvoice and SalesInvoice transactions keyed on the EBS invoice number.
  • Sync EBS customers and items to Avalara customer codes and tax codes so exemptions and taxability are correct.
  • Bridge EBS Basic Auth with operating unit context to Avalara account-ID and license-key Basic Auth.
  • Poll EBS on a schedule, retry Avalara 429 responses with backoff, and keep a full audit trail per record.

Questions

Which direction does data move between Oracle E-Business Suite and Avalara?
The main flow is Oracle E-Business Suite into Avalara. AP and AR invoice lines, plus customer and item references, move from EBS into AvaTax for tax calculation. The calculated tax is written back into the EBS invoice interface where a write service is deployed; Avalara holds no GL or vendor data, so no accounting records flow out of it.
How does the integration handle tax without webhooks on either side?
Neither system pushes events, so ml-connector polls Oracle E-Business Suite open interface views on LAST_UPDATE_DATE at a cadence you set and sends each new invoice to AvaTax. AvaTax CreateTransaction is synchronous and returns the calculated tax inline, so there is no callback to wait for. AvaTax is queried only to reconcile what it has already processed.
How are duplicate transactions and EBS write delays avoided?
The EBS invoice number is used as the AvaTax document code, so CreateOrAdjustTransaction updates an uncommitted transaction in place instead of creating a duplicate, and a committed code is voided then re-created if it must change. On the EBS side, an invoice write inserts into an interface table that a concurrent program imports, so ml-connector confirms the row reached the base table rather than treating a 200 as a completed import.

Related integrations

Connect Oracle E-Business Suite and Avalara

Free to use. Add your credentials, ping your real systems, and see if we fit.

Get started