Sage Intacct and FedEx integration
Sage Intacct tracks your general ledger and accounts payable. FedEx moves your shipments and freight. Connecting the two ensures every outbound and inbound shipment cost appears in your accounting records on the correct GL account and cost center, without re-keying freight invoices by hand. Purchase order references and shipment tracking are aligned across both systems so you know the cost of getting goods to where they are needed.
What moves between them
Shipment and tracking data flow from FedEx into Sage Intacct. ml-connector polls FedEx every hour (or on your schedule) to fetch recently created shipments, rate quotes, and tracking events. For each shipment, it extracts the freight cost, matches the shipment to a purchase order via PO references, and posts the shipping expense to the appropriate GL account and cost center in Intacct's general ledger. Shipment status (in transit, delivered, exception) is recorded in the audit trail so your finance team can reconcile freight costs when invoices arrive. No data is written back to FedEx.
How ml-connector handles it
ml-connector stores FedEx API Key and Secret encrypted, then uses OAuth 2.0 client credentials to obtain a bearer token at session start and caches it for up to one hour to avoid hitting the IP-level token rate limit (3 tokens per 5 seconds). It respects the transaction rate limit (1,400 per 10 seconds) by batching Track API calls and using the endpoint's 30-tracking-numbers-per-request bulk fetch. On the Intacct side, ml-connector stores senderId, senderPassword, companyId, userId, and userPassword encrypted and calls getAPISession to obtain a sessionid, then caches that for 50 minutes before refreshing. Every Intacct XML request must strip forbidden C0 control characters from input before sending. Shipment tracking numbers are keyed as transactionId for client-side deduplication in case a shipment is polled twice. When a shipment cost is posted to Intacct, ml-connector maps the FedEx account and service type (e.g., FedEx Ground, FedEx Express) to a pre-configured GL account and cost center code, so the finance team controls where freight lands in the ledger. If the GL account or cost center is missing, the record is held and logged for manual review rather than failing the entire batch. Retries use exponential backoff for both OAuth token refresh (401 responses) and transaction limits (HTTP 429). Every shipment, tracking event, and GL posting carries a full audit trail.
A real-world example
A mid-sized e-commerce business uses Sage Intacct for accounting and finance reporting, and ships orders to customers via FedEx Ground and FedEx Express every day. Before the integration, the operations team exported FedEx freight invoices weekly, summed them by service type and destination region, and sent a spreadsheet to the finance team to post the costs into Intacct GL accounts. The invoice matching took hours and manual verification, and errors in cost allocation delayed month-end close. With Sage Intacct and FedEx connected, every shipment's cost flows automatically into the correct GL account and cost center based on service type and destination. The finance team runs month-end close with freight costs already posted and reconciled against the FedEx invoice, cutting the manual entry step and improving accuracy.
What you can do
- Post FedEx shipment costs to Sage Intacct GL accounts on a schedule, mapped by service type and destination cost center.
- Match shipment tracking numbers and PO references between FedEx and Sage Intacct so costs are allocated to the correct purchase orders.
- Handle FedEx OAuth token refresh and Intacct XML session caching to avoid rate limits and dropped requests.
- Parse shipment status changes from FedEx tracking events and record them in the audit trail for reconciliation.
- Retry failed GL postings with exponential backoff and hold unmatched accounts for manual review rather than dropping records.
Questions
- Can ml-connector pull freight invoices directly from FedEx?
- No. FedEx does not expose an invoice REST API; freight invoices are available only through the FedEx Billing Online web portal. ml-connector extracts shipment costs and tracking data via the Track API and the shipment creation endpoint, then posts those costs to Sage Intacct GL accounts on the schedule you define. When the FedEx freight invoice arrives, your finance team can reconcile it against the GL postings already in Intacct.
- What happens if a GL account or cost center does not exist in Sage Intacct?
- ml-connector holds the record and logs it for manual review instead of failing the entire batch. This allows you to add new cost centers to Intacct without disrupting the sync; the next time the scheduled run occurs, the same shipment record is retried and posted if the account now exists.
- How does ml-connector handle FedEx's rate and token limits?
- FedEx enforces a 3-tokens-per-second limit (triggers a 403 for 10 minutes if exceeded) and an API rate limit of 1,400 transactions per 10 seconds per project. ml-connector caches the OAuth bearer token for the full 1-hour TTL and batches Track API calls to use the 30-tracking-numbers-per-request bulk endpoint, reducing token consumption and API calls. If a rate limit is hit, ml-connector backs off and retries.
Related integrations
More Sage Intacct integrations
Other systems that connect to FedEx
Connect Sage Intacct and FedEx
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started